我有一个SSIS例程,它从一个非常动态的表中读取,并在截断原始源表之前,将它找到的任何行插入到不同数据库中的表中.
由于源表的动态特性,这种截断不会令人惊讶地导致行无法进入第二个数据库.
源表上有一个标识列,但不会迁移它.
我无法更改任何表架构.
解决方法
一个可能听起来很愚蠢但可行的选项是首先删除并使用
OUTPUT子句.
我创建了一个简单的控制流,为我填充一个表.
IF EXISTS ( SELECT 1 FROM sys.tables AS T WHERE T.name = 'DeleteFirst' ) BEGIN DROP TABLE dbo.DeleteFirst; END CREATE TABLE dbo.DeleteFirst ( [name] sysname ); INSERT INTO dbo.DeleteFirst SELECT V.name FROM master.dbo.spt_values V WHERE V.name IS NOT NULL;
在我的OLE DB源中,不是使用SELECT,而是删除要沿管道传输的数据并输出DELETED虚拟表. Somethinng喜欢
DELETE DF OUTPUT DELETED.* FROM dbo.DeleteFirst AS DF;
它有效,它的工作原理!