Tôi muốn cập nhật bảng có tên là Sorels_ext từ bảng có tên là Sorels. Liên kết giữa chúng là fkey_id của Sorels_ext bằng với identity_column của bảng Sorels. Đây là lần thử đầu tiên của tôi tại câu lệnh Merge và tôi đang cố gắng tìm hiểu cú pháp.Cần trợ giúp với câu lệnh Merge
MERGE Sorels_ext AS SORe
USING (select SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END from Sorels AS SOR)
ON (SORe.fkey_id = SOR.identity_column)
WHEN MATCHED THEN
UPDATE SET SORe.fkey_id = SOR.identity_column, SORe.Color = select SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END
WHEN NOT MATCHED THEN
INSERT (SORe.fkey_id, SORe.Color) VALUES (SOR.identity_column, SORe.Color = select SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END);
Khi tôi chạy này, tôi nhận được lỗi sau:
Lỗi 2009/10/22 13:38:51 0: 00: 00.000 SQL Server Database Error: cú pháp sai gần từ khóa ' TRÊN'. 46 0
*** INFO THÊM ******
Sau khi sửa chữa đầu tiên gợi ý, các mã được như sau:
MERGE Sorels_ext AS SORe
USING (select SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END from Sorels) AS SOR
ON (SORe.fkey_id = SOR.identity_column)
WHEN MATCHED THEN
UPDATE SET SORe.fkey_id = SOR.identity_column, SORe.Color = CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END
WHEN NOT MATCHED THEN
INSERT (SORe.fkey_id, SORe.Color) VALUES (SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END);
Bây giờ tôi nhận được lỗi sau:
Lỗi 10/22/2009 2:03:29 PM 0: 00: 00.000 Lỗi cơ sở dữ liệu máy chủ SQL: Danh sách cột chèn được sử dụng trong câu lệnh MERGE không thể chứa số nhận dạng nhiều phần. Thay vào đó, hãy sử dụng số nhận dạng một phần. 55 0
******* THÊM THÔNG TIN THÊM ****** Sau khi điều chỉnh từ lời đề nghị, tôi đã điều sau đây:
MERGE Sorels_ext AS SORe
USING (select SOR1.identity_column, CASE
WHEN left(SOR1.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR1.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END as colors from Sorels as SOR1) as SOR
ON (SORe.fkey_id = SOR.identity_column)
WHEN MATCHED THEN
UPDATE SET SORe.fkey_id = SOR.identity_column, SORe.Color = CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END
WHEN NOT MATCHED THEN
INSERT (fkey_id, Color) VALUES (SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END);
tôi nhận được lỗi:
Lỗi 10/22/2009 2:46:51 PM 0: 00: 00.000 Lỗi cơ sở dữ liệu máy chủ SQL: Tên cột không hợp lệ 'FPARTNO'. 56 0
Tôi đang làm gì sai?
**** TÔI GOT IT !!! *****
MERGE Sorels_ext AS SORe
USING (select SOR.identity_column, CASE
WHEN left(SOR.FPARTNO, 2) = 'BL' THEN 'Blue'
WHEN left(SOR.FPARTNO, 2) = 'RD' THEN 'Red'
ELSE 'White'
END as colors from Sorels as SOR) SOR1
ON (SORe.fkey_id = SOR1.identity_column)
WHEN MATCHED THEN
UPDATE SET SORe.fkey_id = SOR1.identity_column, SORe.Color = SOR1.colors
WHEN NOT MATCHED THEN
INSERT (fkey_id, Color) VALUES (SOR1.identity_column, SOR1.colors);
Xin chúc mừng. –
Ngoài ra nhỏ: không có điểm nào trong việc chỉ định 'fkey_id = identity_column', vì truy vấn của bạn đã xác minh rằng chúng có cùng giá trị. –