คุณจะเปลี่ยนประเภทข้อมูลของคอลัมน์ใน SQL Server ได้อย่างไร


คำตอบ:


564
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

แก้ไข ตามที่ระบุไว้ NULL / NOT NULL ควรระบุไว้ให้ดูคำตอบของ Robเช่นกัน


1
ทำไมมันควรจะระบุ? ประโยชน์คืออะไร ทุกสิ่งที่ฉันต้องการจากไปเพราะฉันไม่ต้องพูดถึงฉันคิดว่า
เหลือเชื่อ Jan

5
@TheincredibleJan มันคงเท่ห์ แต่น่าเสียดายที่มันไม่ได้ผล หากคุณออกALTER TABLE TableName ALTER COLUMN ColumnNameคำสั่งให้เปลี่ยนคอลัมน์ที่มีอยู่นั่นคือ[NOT NULL]และคุณไม่ได้ระบุไว้อย่างชัดเจนมันจะเป็น[NULL]หลังจากนั้นเนื่องจากเป็นค่าเริ่มต้น
takrl

4
ใช้งานได้เฉพาะถ้าคุณไม่มีข้อ จำกัด และดัชนีในคอลัมน์นั้นมิฉะนั้นคุณต้องวางทุกอย่างแล้วสร้างใหม่ซึ่งเป็นงานที่น่าเบื่อและน่ากลัวโดยเฉพาะอย่างยิ่งถ้าคุณมีการอ้างอิงต่างประเทศจำนวนมากในคอลัมน์นั้น เช่นเมื่อเปลี่ยนจาก tinyint เป็น int
Hrvoje Batrnek

ระวังถ้าคุณมี IDE ที่เปิดอยู่ (เช่น SSMS) แม้จะปิดแท็บออกแบบของฉันบนโต๊ะฉันก็เปลี่ยน (หลังจากเรียกใช้สคริปต์และคลิกขวาบนโต๊ะเพื่อเลือก "ออกแบบ") ก็ยังคงแสดงประเภทข้อมูลเก่า! มันเป็นเพียงหลังจากปิดแท็บทั้งหมดของฉันใน Management Studio และเปิดมุมมองออกแบบอีกครั้งในที่สุดมันก็แสดง DataType ที่อัปเดตแล้ว น่ากลัวมากดังนั้นควรระมัดระวัง (อาจเป็นข้อผิดพลาดแคชที่ได้รับการแก้ไขแล้วในตอนนี้หรือหนึ่ง MS ไม่เคยรบกวนการแก้ไข) สำหรับผู้ที่สงสัยว่าทำไมฉันจึงรัน T-SQL เมื่อฉันใช้ Design-View ฉันต้องการเปลี่ยน DataTypes เป็นSysName(ซึ่ง SSMS ไม่อนุญาต)
MikeTeeVee

ฉันไม่มีโชคกับคำสั่งเหล่านี้ใน XAMPP ALTER TABLE table MODIFY COLUMN column datatypeทำงานให้ฉัน
Pavindu

173

อย่าลืมความผิดพลาด

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
มีความไร้ประโยชน์อะไร? หากฉันไม่ต้องการเปลี่ยน - ประโยชน์ในการตั้งค่าอีกครั้งคืออะไร
เหลือเชื่อ Jan

7
^ มันจะเป็นค่าเริ่มต้นเป็น NULL หลังจากคำสั่งเปลี่ยนแปลงตารางเสร็จสิ้นการดำเนินการโดยไม่ต้องกำหนดสิ่งที่ควรจะเป็นอย่างชัดเจน
sc305495

1
@ sc305495 ​​ตามจริงแล้วมันจะเริ่มต้นเมื่อใดก็ตามที่การตั้งค่า ANSI_NULL_DEFAULT ของคุณคือ
Zikato


13

ไวยากรณ์ในการปรับเปลี่ยนคอลัมน์ในตารางที่มีอยู่ใน SQL Server (Transact-SQL) คือ:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

ตัวอย่างเช่น:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

ALTER TABLEตัวอย่างSQL Server นี้จะแก้ไขคอลัมน์ที่เรียกว่าlast_nameเป็นชนิดข้อมูลVARCHAR(75)และบังคับให้คอลัมน์ไม่อนุญาตให้มีค่า Null

ดูที่นี่


1
โปรดเพิ่มข้อมูลเพิ่มเติมในคำตอบของคุณและจัดรูปแบบรหัส / แบบสอบถาม!
Sebastian Brosch

4

ตราบใดที่คุณเพิ่มขนาดของ varchar คุณก็โอเค ตามตารางอ้างอิงAlter :

การลดความแม่นยำหรือมาตราส่วนของคอลัมน์อาจทำให้ข้อมูลถูกตัดทอน


3

สำหรับการเปลี่ยนประเภทข้อมูล

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

สำหรับการเปลี่ยนคีย์หลัก

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

สิ่งนี้ดูเหมือนจะไม่เพิ่มอะไรเลยในคำตอบที่ได้รับการยอมรับในปัจจุบันเมื่อหลายปีก่อนและการเปลี่ยนแปลงที่คุณโพสต์ลงในโครงสร้างตารางนั้นไม่ตรงกับคำถาม
PeterJ

-11

ลองสิ่งนี้:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
"แก้ไข" เห็นได้ชัดว่าไม่ถูกต้อง กรุณาเปรียบเทียบกับคำตอบอื่น ๆ
แฟรงค์

3
นี่เป็นรุ่นเก่า แต่ปรากฏว่า Kai Tzer พิสูจน์ MySql และ / หรือ Oracle DDLs
เชลดอนโคเฮน

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