ฉันมีฐานข้อมูล SQL Server และฉันก็รู้ว่าฉันสามารถเปลี่ยนชนิดของหนึ่งในคอลัมน์ที่จากไปint
bool
ฉันจะทำเช่นนั้นได้อย่างไรโดยไม่สูญเสียข้อมูลที่ป้อนไว้ในตารางนั้นไปแล้ว
ฉันมีฐานข้อมูล SQL Server และฉันก็รู้ว่าฉันสามารถเปลี่ยนชนิดของหนึ่งในคอลัมน์ที่จากไปint
bool
ฉันจะทำเช่นนั้นได้อย่างไรโดยไม่สูญเสียข้อมูลที่ป้อนไว้ในตารางนั้นไปแล้ว
คำตอบ:
คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้ ค่าใด ๆ ของ 0 จะกลายเป็น 0 (BIT = false) สิ่งอื่น ๆ จะกลายเป็น 1 (BIT = true)
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
ตัวเลือกอื่นคือสร้างคอลัมน์ประเภทBIT
ใหม่กรอกจากคอลัมน์เก่าและเมื่อเสร็จแล้วให้วางคอลัมน์เก่าแล้วเปลี่ยนชื่อใหม่เป็นชื่อเก่า ด้วยวิธีนี้หากบางสิ่งในระหว่างการแปลงผิดพลาดคุณสามารถย้อนกลับได้ตลอดเวลาเนื่องจากคุณยังมีข้อมูลทั้งหมด ..
NULL
ซากNULL
, 0
กลายเป็นFalse
, ที่ไม่ใช่ค่าเป็นศูนย์ (1, -1 ปี 1999 -987 ... ) True
กลายเป็น
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
หมายเหตุ: หากมีขนาดคอลัมน์ให้เขียนขนาดด้วย
หากเป็นการเปลี่ยนแปลงที่ถูกต้อง
คุณสามารถเปลี่ยนคุณสมบัติ
เครื่องมือ -> ตัวเลือก -> นักออกแบบ -> นักออกแบบตารางและฐานข้อมูล -> ยกเลิกการเลือก -> ป้องกันการบันทึกการเปลี่ยนแปลงที่จำเป็นในการสร้างตารางใหม่
ตอนนี้คุณสามารถเปลี่ยนชื่อคอลัมน์ได้อย่างง่ายดายโดยไม่ต้องสร้างตารางใหม่หรือสูญเสียระเบียน ur
ทำไมคุณคิดว่าคุณจะสูญเสียข้อมูล เพียงเข้าไปที่ Management Studio แล้วเปลี่ยนประเภทข้อมูล หากค่าที่มีอยู่สามารถแปลงเป็นบูล (บิต) ก็จะทำเช่นนั้น กล่าวอีกนัยหนึ่งถ้าแผนที่ "1" เป็นจริงและ "0" แผนที่เป็นเท็จในเขตข้อมูลเดิมของคุณคุณจะไม่เป็นไร
ถ้าคุณใช้ T-SQL (MSSQL); คุณควรลองใช้สคริปต์นี้:
ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
ถ้าคุณใช้ MySQL คุณควรลองใช้สคริปต์นี้:
ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
ถ้าคุณใช้ Oracle คุณควรลองใช้สคริปต์นี้:
ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
แก้ไขชนิดข้อมูลคอลัมน์ด้วยประเภทการตรวจสอบของคอลัมน์:
IF EXISTS(
SELECT 1
FROM sys.columns
WHERE NAME = 'YourColumnName'
AND [object_id] = OBJECT_ID('dbo.YourTable')
AND TYPE_NAME(system_type_id) = 'int'
)
ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT
สำหรับฉันใน sql server 2016 ฉันทำแบบนี้
* หากต้องการเปลี่ยนชื่อคอลัมน์ Column1 เป็น column2
EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'
* หากต้องการแก้ไขคอลัมน์ประเภทจากสตริงเป็นint :( โปรดตรวจสอบให้แน่ใจว่าข้อมูลอยู่ในรูปแบบที่ถูกต้อง )
ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2 int;
ในรุ่นกะทัดรัดจะมีขนาดโดยอัตโนมัติสำหรับชนิดข้อมูลวันที่และเวลา (8) ดังนั้นไม่จำเป็นต้องกำหนดขนาดของฟิลด์และสร้างข้อผิดพลาดสำหรับการดำเนินการนี้ ...
ฉันสามารถแก้ไขประเภทข้อมูลของเขตข้อมูลตารางด้วยแบบสอบถามต่อไปนี้: และใน Oracle DB ด้วย
ALTER TABLE table_name
MODIFY column_name datatype;
แทนที่ประเภทข้อมูลโดยไม่สูญเสียข้อมูล
alter table tablename modify columnn newdatatype(size);