ใน PostgreSQL ฉันสามารถสร้างตารางที่มีข้อมูลการทดสอบบางส่วนและจากนั้นในการทำธุรกรรมโยกย้ายไปยังคอลัมน์ใหม่ของรูปแบบที่แตกต่างกันส่งผลให้ในหนึ่งตารางเขียนเมื่อCOMMIT
,
CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
ติดตามโดย,
BEGIN;
ALTER TABLE foo ADD COLUMN b varchar;
UPDATE foo SET b = CAST(a AS varchar);
ALTER TABLE foo DROP COLUMN a;
COMMIT;
อย่างไรก็ตามสิ่งเดียวกันใน SQL Server ของ Microsoft ดูเหมือนจะสร้างข้อผิดพลาด เปรียบเทียบซอ db db ที่ใช้งานได้โดยที่ADD
คำสั่ง (คอลัมน์) อยู่นอกธุรกรรม
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
COMMIT;
-- txn2
BEGIN TRANSACTION;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
ต่อซอ db ตัวนี้ที่ใช้งานไม่ได้
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
แต่แทนที่จะเกิดข้อผิดพลาด
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
อย่างไรก็ตามมีการทำธุรกรรมนี้ปรากฏสำหรับ DDL ทำตัวเหมือน PostgreSQL?