在sql中,我尝试这样做:
我有一个(暂存)表,假设有8列
其中4列是主表的主键,我需要在其中插入暂存表的数据
1列是该列的操作(i表示插入,u表示更新,d表示删除)
三是数据
这意味着对于主表的一个主键,我可以在一个转移表中为多个操作设置多个列(例如,如果我有一个insert,那么就有一个update)
我要做的是首先选择所有列,其中对于主键,暂存表中只有一条记录,然后从中选择一条插入的记录。我有:
SELECT [KEY1], [KEY2], [KEY3], [KEY4], COUNT(1) AS [COUNT]
INTO #COUNTTABLE
FROM staging
GROUP BY [KEY1], [KEY2], [KEY3], [KEY4]
SELECT [KEY1], [KEY2], [KEY3], [KEY4]
INTO #KEYTABLE
FROM #COUNTTABLE
WHERE [COUNT]=1
这样,我就有了在我的暂存表中只出现1次的键列表。我现在想要的是从这个列表中,选择所有来自staging where operation='i'的数据
比如说:
SELECT * FROM staging WHERE ([KEY1], [KEY2], [KEY3], [KEY4]) in #KEYTABLE AND [Operation]='I'
但我没有确切的语法来做这样的事情,什么是最好的解决办法呢?
我可以做一个while循环,但是对于大表要做很多次(我已经先尝试了这个解决方案,意思是在staging表的所有行上循环并执行操作,但是要做很多次,所以尝试通过首先对staging中出现一次的行进行批量插入来优化操作,这是大多数的行,所以它将改善很多过程)谢谢
1条答案
按热度按时间ijxebb2r1#
使用此选项: