我有一个临时表,其数据需要拆分为3个其他表。这些表中的每一个都有一个主键,它不相互共享或与临时表共享。这是一个小样本:
表1
RSN AGENT STATUS STATUS DECRIPTION
0 280151 51 Terminated
1 86 57 C/O Comp Agent Dele
2 94 57 C/O Comp Agent Dele
3 108 51 Terminated
表2
RSN AGENT CITY
1 10 Englewood
2 123 Jackson
3 35 Eatontown
4 86 Trenton
表3
RSN AGT SIGN NO_EMP START_DATE
0 241008 Y 1 2002-10-31 00:00:00.000
1 86 Y 0 2002-10-24 09:51:10.247
2 94 Y 0 2002-10-24 09:51:10.247
3 108 Y 0 2002-10-24 09:51:10.247
我需要检查每个表以查看临时表中的数据是否存在,如果不存在,我想插入那些带有RSN#的行,从该表中的最大数字开始。因此,如果我在第一个表中有5000条记录,并且我将添加5000个新行,则它们将被编号为5001到10000.
然后我需要检查是否有任何列已更改以匹配行并更新它们。
提前感谢您的协助。
斯科特
答案 0 :(得分:0)
您必须重复T1,2和3的代码,并更新匹配和不匹配的列。
插入新值:
Insert Into Table1(col1, col2, ...)
Select t.col1, t.col2
From temp as t
Left Join table1 as t1 On t.matchcol1 = t1.matchcol1 and t.matchcol2 = t1.matchcol2
Where t.col1 is null
将matchcol1替换为T和T1之间匹配列的列表
更新
Update t1 set col1 = t.col1, t.col2 = t1.col2, ...
From table1 as t1
Inner Join temp as t On t.matchcol1 = t1.matchcol1 and t.matchcol2 = t1.matchcol2 and ...
Where col1 <> t.col1 or t.col2 <> t1.col2 or ...
这可能也有效:
我不确定您是否真的需要更新某些内容或只是插入以及如何链接temp和table1以了解它是否已被更改。
Insert Into Table1(RSN, AGENT, STATUS, STATUS, DECRIPTION)
Select (Select max(RSN) From table1) + Row_number() over(order by agent)
, AGENT, STATUS, STATUS, DECRIPTION
From (
Select AGENT, STATUS, STATUS, DECRIPTION From TempTable
Except
Select AGENT, STATUS, STATUS, DECRIPTION From Table1
) as t1
或者您可以升级到SQL Server 2008并使用Merge。这会容易得多
答案 1 :(得分:0)
我最后在我的临时表中添加了4个新列; temp rsn#,这是一个以1开头的标识列,以及我3个目标表中每个目标表的rsn#。我创建了一个变量,从每个表中获取最大值,然后将其添加到我的temp rsn#中。