เพิ่มคอลัมน์ลงในตารางที่มีอยู่และหมายเลขเฉพาะบน MS SQL Server


121

ฉันต้องการเพิ่มคอลัมน์ลงในฐานข้อมูลเดิมที่มีอยู่และเขียนโพรซีเดอร์ที่ฉันสามารถกำหนดค่าแต่ละระเบียนให้แตกต่างกัน บางอย่างเช่นการเพิ่มคอลัมน์และสร้างข้อมูลโดยอัตโนมัติ

เช่นถ้าฉันเพิ่มคอลัมน์ใหม่ชื่อ "ID" (ตัวเลข) ฉันต้องการเริ่มต้นค่าที่ไม่ซ้ำกันให้กับแต่ละระเบียน ดังนั้นฉัน ID คอลัมน์1 to 1000จะมีบันทึกจากการพูด
ฉันจะทำอย่างไร?


2
นี่จะเป็นฐานข้อมูลเฉพาะ คุณควรระบุฐานข้อมูลที่คุณกำลังทำงานอยู่
dvorak

1
คุณควรแก้ไขคำถามของคุณเพื่อพูดถึงสิ่งนั้น
dvorak

คำตอบ:


221

สิ่งนี้จะขึ้นอยู่กับฐานข้อมูล แต่สำหรับ SQL Server สามารถทำได้ดังนี้:

alter table Example
add NewColumn int identity(1,1)

5
มันทำงานได้อย่างสวยงามและเพิ่มตัวเลขทั้งหมดที่ฉันต้องการโดยอัตโนมัติ ขอบคุณ!
djangofan

9
หากคุณมีปัญหาในการเปลี่ยนแปลงกับสตูดิโอการจัดการ gui คุณสามารถเปลี่ยนการตั้งค่าภายใต้ / Tools / Options / Designer / Table และ Database Desiger คุณจะพบช่องทำPrevent saving changes that require table re-creationเครื่องหมายยกเลิกการเลือกช่องนั้นและคุณจะสามารถเพิ่มคอลัมน์ข้อมูลประจำตัวได้โดยใช้ กุย
surfmuggle

22

จะช่วยได้ถ้าคุณโพสต์ฐานข้อมูล SQL ที่คุณใช้อยู่ สำหรับ MySQL คุณอาจต้องการ auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

ไม่แน่ใจว่าสิ่งนี้ใช้ค่าย้อนหลังหรือไม่ หากไม่เป็นเช่นนั้นคุณควรจะสามารถทำซ้ำค่าของคุณด้วยขั้นตอนที่จัดเก็บไว้หรือในโปรแกรมง่ายๆ (ตราบเท่าที่ไม่มีใครเขียนไปยังฐานข้อมูล) และตั้งค่าให้ใช้LAST_INSERT_ID()ฟังก์ชันเพื่อสร้างค่า id


7
ฉันอาจยืนยันได้เช่นกันว่าสิ่งนี้ใช้ได้กับ MySQL ฉันเพิ่งเพิ่มฟิลด์ ID ที่เพิ่มขึ้นไปยังตารางที่ยังไม่ได้จัดทำดัชนีที่มีอยู่และแต่ละแถวจะมีรหัสใหม่ที่ไม่ซ้ำกัน
Doug Kavendek

ขออภัยมันเก่า แต่มันบอกว่าเซิร์ฟเวอร์ SQL ในชื่อเรื่อง
นิค

11

สำหรับ oracle คุณสามารถทำสิ่งต่างๆดังต่อไปนี้

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

และเทียบเท่ากับ Postgres (บรรทัดที่สองบังคับเฉพาะเมื่อคุณต้องการให้ "id" เป็นคีย์):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);

4

เพียงแค่ใช้ ALTER TABLE ก็น่าจะใช้ได้แล้ว เพิ่มคอลัมน์ด้วยประเภทที่เหมาะสมและแฟล็ก IDENTITY และควรทำเคล็ดลับ

ดูบทความ MSDN นี้http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspxเกี่ยวกับไวยากรณ์ของตารางเปลี่ยนแปลง


3

สำหรับประเภทข้อมูล UNIQUEIDENTIFIER ในเซิร์ฟเวอร์ sql ให้ลองทำเช่นนี้

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

หากคุณต้องการสร้างคีย์หลักจากคอลัมน์นั้นให้ใช้สิ่งนี้

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

ขึ้นอยู่กับฐานข้อมูลเนื่องจากแต่ละฐานข้อมูลมีวิธีการเพิ่มหมายเลขลำดับที่แตกต่างกัน ฉันจะแก้ไขตารางเพื่อเพิ่มคอลัมน์จากนั้นเขียนสคริปต์ db ใน groovy / python / etc เพื่ออ่านข้อมูลและอัปเดต id ด้วยลำดับ เมื่อตั้งค่าข้อมูลแล้วฉันจะเพิ่มลำดับลงในตารางที่เริ่มต้นหลังตัวเลขบนสุด เมื่อตั้งค่าข้อมูลแล้วให้ตั้งค่าคีย์หลักให้ถูกต้อง


0

หากคุณไม่ต้องการให้คอลัมน์ใหม่ของคุณเป็นประเภทIDENTITY(เพิ่มขึ้นอัตโนมัติ) หรือคุณต้องการระบุเฉพาะเกี่ยวกับลำดับการเรียงลำดับแถวของคุณคุณสามารถเพิ่มคอลัมน์ประเภทINT NULLแล้วเติมข้อมูลในลักษณะนี้ ในตัวอย่างของฉันคอลัมน์ใหม่เรียกว่า MyNewColumn และคอลัมน์คีย์หลักที่มีอยู่สำหรับตารางเรียกว่า MyPrimaryKey

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

สิ่งนี้ใช้ได้ใน SQL Sever 2005 และใหม่กว่านั่นคือเวอร์ชันที่รองรับ ROW_NUMBER()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.