0

假设我有一个临时表#t,其中包含包含完整行数的列(MyGroup、FSGRoup、Account、BrokerCode、AccountType、NewInvestmentType、AccountOrder、LPI、LPII、LPIII)。

我有另一个表 #t2 具有相同的布局,并且只有 #t 中包含的行子集。如果 MyGroup、FSGRoup、Account、BrokerCode、AccountType、NewInvestmentType、AccountOrder 列不匹配,我想将 #t 中但不在 #t2 中的行插入到 #t2 中。

有什么建议么?

4

3 回答 3

1

如果您不想使用合并语句,如前所述,您可以执行以下操作。第一个查询使用外连接来获取#t 中但不在#t2 中的行,并将它们放入第三个临时表#t3。第二个查询将它们从#t3 放入#t2。

SELECT t.MyGroup, t.FSGRoup, t.Account, t.BrokerCode, t.AccountType, t.NewInvestmentType, t.AccountOrder, t.LPI, t.LPII, t.LPIII
INTO #t3
FROM #t t
LEFT OUTER JOIN #t2 t2
ON t.MyGroup = t2.MyGroup AND t.FSGRoup = t2.FSGRoup AND t.Account = t2.Account AND t.BrokerCode = t2.BrokerCode AND t.AccountType = t2.AccountType AND t.NewInvestmentType = t2.NewInvestmentType AND t.AccountOrder = t2.AccountOrder
WHERE t2.MyGroup IS NULL 
/*Assuming that MyGroup can't be null.  If it can, use a column that can't.*/

INSERT INTO #t2
SELECT MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII
FROM #t3
于 2013-10-04T20:23:35.523 回答
0

合并是一个很好的解决方案,但是当需要一次性完成多个操作(例如插入、更新和删除)时,建议使用合并。因为这里的要求是将数据从不属于#ta的#t插入到#t2中,除了会做

insert into #t2(
MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII)

select MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII from #t 
except
select MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII from #t2

这将比之前发布的其他两个解决方案更有效和可靠

于 2013-10-05T17:41:05.100 回答
0

假设您使用的是 sql 2008+,这正是合并命令的用途(除其他外)

要获得一个很好的简单解释,请查看这个关于使用合并的问题——稍加搜索即可获得更多信息。MS 文档虽然有点令人困惑。

添加

搞砸了,意味着包含这个链接也是一篇关于合并基础的好文章。

于 2013-10-04T19:42:32.203 回答