我有两个表,如下所示我需要做的是 循环遍历Table2行,需要检查table2中是否存在Table2中的table1ID。如果存在,则将现有table1行活动标志更新为0,并在table1中插入具有Table2行值的新记录。如果不存在,则在table1中插入一个包含Table2行值的新记录。我们可以假设E1,E2,E3列对应于表1中的Q1A,Q2A,Q3A。
Table1:
Table1ID Q1A Q2A Q3A Active
1 2 Test 1 1
2 3 Test2 1 1
3 4 Test3 1 1
4 5 Test4 1 1
Table2:
Table1ID E1 E2 E3
1 2 TestData1 1
2 3 TestData2 1
3 4 TestData3 1
5 5 TestData5 1
6 7 TestData6 0
答案 0 :(得分:1)
因此,在这两种情况下,如果记录存在,您将从Table2插入一行。唯一的区别是,如果表1中存在,则要将其设置为零。
DECLARE @currid INT, @maxid INT, @lastid INT
SELECT @currid = 0
, @lastid = 0
, @maxid = MAX(Table1ID)
FROM Table2
WHILE (@currid < @maxid)
BEGIN
-- Get the next minimum Table1ID from Table2
SELECT @currid = MIN(Table1ID)
FROM Table2
WHERE Table1ID > @lastid
-- See if it exists in Table1
IF EXISTS (SELECT 1 FROM Table1 WHERE Table1ID = @currid)
BEGIN
-- Set Active to zero as specified
UPDATE Table1ID
SET Active = 0
WHERE Table1ID = @currid
END
-- Copy row from Table2 - I assume with all columns as well as 1 for Active
INSERT INTO Table1
SELECT *, 1
FROM Table2
WHERE Table1ID = @currid
-- Set our ID value for the next loop
SET @lastid = @currid
END
答案 1 :(得分:1)
如果存在 将现有table1行活动标志更新为0 和 在table1中插入一条新记录,其中包含Table2行的值。
如果不存在,请在table1中使用Table2行
中的值插入新记录
根据您所写的内容,您似乎希望将现有记录的Active
列更新为0,并在任何情况下插入Table2 中的记录。
下面应该适合你:
MERGE Table1 t1
USING Table2 t2
ON t1.Table1ID = t2.Table1ID
WHEN MATCHED THEN
UPDATE
SET t1.Active = 0;
INSERT (Table1ID, Q1A, Q2A, Q3A, Active)
VALUES (t2.Table1ID, E1, E2, E3, 1);