【发布时间】:2012-04-26 15:34:55
【问题描述】:
我遇到需要将数据从 table1 插入 table2 的情况。插入前检查table2中是否已经存在某行。
条件是: 1) id 和 ahccs 的值在两个表中都是相同的,那么什么都不做。 2) id 的值相同但 ahccs 不同,然后设置 flag ='z' 并使用新的 ahccs 值插入相同的 id。
我正在使用 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
WHEN MATCHED AND t2.ahccs != t1.ahccs THEN
UPDATE
SET flag = 'z'
INSERT VALUES (t2.id, t1.ahccs, t1.info, 'l');
我遇到的两个问题是: 1)我相信合并不支持多个步骤。 2) WHEN NOT MATCHED 情况下不允许更新。
请指教。
谢谢。
【问题讨论】:
-
您需要在示例中阐明您想要的结果表。当然,当结果不匹配时,它不会让你
UPDATE,因为你要更新哪一行,所有的表?行匹配时所需的行为是什么?,您需要 ÙPDATE 哪些列? -
条件是: 1) id 和 ahccs 的值在两个表中都是一样的,那么什么都不做。 2) id 的值相同但 ahccs 不同,然后设置 flag ='z' 并使用新的 ahccs 值插入相同的 id。
-
我已经更新了问题,在那里犯了一些错误。
-
您要更新源表、目标表还是两者中的
flag = 'z'? -
re 2):更新对于“不匹配”没有任何意义。如果未找到任何行,则没有可以更新的内容。