我有一种情况,我需要将数据从 table1 插入 table2。在插入之前检查 table2 中是否已经存在某一行,如果存在则只需更新该行的 col2、col4。如果它不存在,则插入一个新行。
我正在使用 SQLSERVER 2008 R2。我怎么能做到这一点?
现在情况发生了一些变化。我需要这样的东西。
DECLARE @table1 TABLE
(id int not null, ahccs int not null, info varchar(25), flag varchar(2))
DECLARE @table2 TABLE
(id int not null, ahccs int not null, info varchar(25), flag varchar(2))
INSERT INTO @table1
VALUES(1, 1223, 'et', 'X')
INSERT INTO @table1
VALUES(2, 321, 'et', 'X')
INSERT INTO @table1
VALUES(3, 134, 'et', 'X' )
INSERT INTO @table1
VALUES(4, 168, 'et', 'X' )
INSERT INTO @table1
VALUES(5, 123, 'et', 'X' )
INSERT INTO @table2
VALUES(1, 1223, 'dt', 'y' )
INSERT INTO @table2
VALUES(2, 456, 'dt', 'y' )
INSERT INTO @table2
VALUES(3, 123, 'dt', 'y' )
INSERT INTO @table2
VALUES(4, 193, 'dt', 'y' )
--SELECT * FROM @table1
SELECT * FROM @table2
MERGE
INTO @table2 t2
USING @table1 t1
ON t2.id = t1.id or t2.ahccs = t1.ahccs
WHEN NOT MATCHED THEN
UPDATE
SET flag = 'z'
INSERT VALUES (100, t1.ahccs, t1.info, 'l');
我遇到的两个问题是:1)我相信合并不支持多个步骤。2) WHEN NOT MATCHED 情况下不允许更新。
请指教。
谢谢你。