ฉันเหนื่อย:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
แต่ให้ข้อความแสดงข้อผิดพลาดนี้:
ALTER TABLE อนุญาตให้เพิ่มคอลัมน์ที่สามารถมีค่าว่างหรือมีการกำหนดค่าเริ่มต้นที่ระบุไว้เท่านั้น
ฉันเหนื่อย:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
แต่ให้ข้อความแสดงข้อผิดพลาดนี้:
ALTER TABLE อนุญาตให้เพิ่มคอลัมน์ที่สามารถมีค่าว่างหรือมีการกำหนดค่าเริ่มต้นที่ระบุไว้เท่านั้น
คำตอบ:
ในฐานะตัวเลือกที่คุณสามารถสร้างคอลัมน์ Null-able ในขั้นต้นจากนั้นอัปเดตคอลัมน์ตารางของคุณด้วยค่าที่ไม่ถูกต้องและสุดท้ายแก้ไขคอลัมน์เพื่อตั้งค่าข้อ จำกัด ที่ไม่ใช่ NULL:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
อีกทางเลือกหนึ่งคือการระบุค่าเริ่มต้นที่ถูกต้องสำหรับคอลัมน์ของคุณ:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: โปรดทราบว่าคำตอบข้างต้นมีGO
สิ่งที่ต้องทำเมื่อคุณเรียกใช้รหัสนี้บนเซิร์ฟเวอร์ Microsoft SQL หากคุณต้องการดำเนินการเดียวกันบน Oracle หรือ MySQL คุณต้องใช้อัฒภาค;
เช่นนั้น:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
คุณกล่าวถึงจะเป็นอันตรายในคำถามใด ๆ ควรจะง่ายพอที่จะดูว่าคุณมีคอลัมน์พิเศษในupdate
คำสั่งที่นี่หรือไม่ โดยทั่วไปคุณจะเพิ่มทีละคอลัมน์หรือสองคอลัมน์เท่านั้น หากคุณบังเอิญเพิ่มคอลัมน์พิเศษลงในupdate
คำสั่งของคุณที่ไม่ได้อยู่ที่นั่นในตัวอย่างนี้คุณอาจไม่ควรรับผิดชอบข้อมูลตั้งแต่แรก
ALTER COLUMN
SQLite ไม่รองรับ
GO
มาก่อนและดูเหมือนว่าจะไม่ใช่ส่วนหนึ่งของข้อกำหนด SQLดังนั้นจึงอาจนำไปสู่ความล้มเหลวสำหรับสคริปต์ที่ไม่ได้รับการดำเนินการโดยหนึ่งในเครื่องมือที่รองรับ ใช้แค่อัฒภาค? ฉันไม่แนะนำให้เผยแพร่มาตรฐานของ Microsoft เนื่องจากพวกเขาไม่ค่อยสนใจเกี่ยวกับมาตรฐานใด ๆ ที่เป็นที่ยอมรับและสมเหตุสมผล แต่คิดค้นของพวกเขาเองเพื่อให้มีการคิดค้นขึ้นเอง นอกเหนือจากนั้นคำตอบที่เป็นประโยชน์
หากคุณไม่อนุญาตให้คอลัมน์เป็น Null คุณต้องระบุค่าเริ่มต้นเพื่อเติมข้อมูลแถวที่มีอยู่ เช่น
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
ใน Enterprise Edition นี่เป็นการเปลี่ยนแปลงเฉพาะข้อมูลเมตาตั้งแต่ปี 2012
ข้อความแสดงข้อผิดพลาดค่อนข้างอธิบายได้ลอง:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
การใช้งาน SQL อื่น ๆ มีข้อ จำกัด ที่คล้ายกัน เหตุผลก็คือว่าการเพิ่มคอลัมน์ต้องเพิ่มค่าสำหรับคอลัมน์ที่ (เหตุผลแม้ว่าจะไม่ได้ร่างกาย) NULL
ซึ่งเริ่มต้น หากคุณไม่อนุญาตNULL
และไม่มีไฟล์default
มูลค่าจะเป็นเท่าไหร่?
เนื่องจาก SQL Server รองรับADD CONSTRAINT
ฉันจึงขอแนะนำแนวทางของ Pavel ในการสร้างคอลัมน์ที่เป็นโมฆะจากนั้นเพิ่มNOT NULL
ข้อ จำกัด หลังจากที่คุณเติมเต็มด้วยNULL
ค่าที่ไม่ใช่
สิ่งนี้ใช้ได้ผลสำหรับฉันยังสามารถ "ยืม" จากมุมมองการออกแบบทำการเปลี่ยนแปลง -> คลิกขวา -> สร้างสคริปต์การเปลี่ยนแปลง
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"