0

我创建了一个名为 DimInternationalFunction 的表。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[DimInternationalFunction]') AND type in (N'U'))
DROP TABLE [DimInternationalFunction]
Go
Create Table DimInternationalFunction
(IntFunctionKey int NOT NULL identity primary key,
SubSubFunctionString char(10),
FunctionCode char(3),
SubFunctionCode char(6),
SubSubFunctionCode char(10),
SubSubFunctionName nvarchar(60),
SubFunctionName nvarchar(60), 
FunctionName nvarchar(60))

我最初在 SSMS 的这个表中插入了记录。


在 SSMS 中手动插入初始记录后,现在我的经理希望我使用 SSIS 插入“仅新记录”。

我已经尝试在 SSMS 中使用它并且它有效。它要么给我插入 0 条记录,要么有时它给我插入 5 条记录。我的经理希望我在 SSIS 中这样做。

我尝试在数据访问模式下的 OLE DB 源中使用此脚本:SQL 命令和 SQL 命令文本:

insert into DWResourceTask.dbo.DimInternationalFunction
select f.SubSubFunctionString,
f.FunctionCode,
f.SubFunctionCode,
f.SubSubFunctionCode,
f.SubSubFunctionName,
f.SubFunctionName, 
f.FunctionName
 from ODS_Function F
where FunctionViewCode = 'INT'
and not exists (select * from DWResourceTask.dbo.DimInternationalFunction I
                where (f.SubSubFunctionString=i.SubSubFunctionString
                        and f.FunctionCode=i.FunctionCode
                        and f.SubFunctionCode=i.SubFunctionCode
                        and f.SubSubFunctionCode=i.SubSubFunctionCode
                        and f.SubSubFunctionName=i.SubSubFunctionName
                        and f.SubFunctionName=i.SubFunctionName
                        and f.FunctionName=i.FunctionName)
)

单击预览后收到的错误消息是

The component reported the following warnings:

Error at Int Function [International Function Table [33]]: No column information was returned by the SQL command.


Choose OK if you want to continue with the operation.
Choose Cancel if you want to stop the operation.

SSIS 中是否有另一个组件可以做到这一点?或者我可以只使用 exec sql 任务组件或 ole db 源吗?

我正在考虑使用连接到数据流任务的 exec sql 任务,在数据流任务中我将放置包含临时表的 ole db 源并对其进行删除,或者是否有任何其他方法可以做到这一点。请帮忙。提前致谢。

4

1 回答 1

0

您可以使用执行 SQL 任务来完成。

如果您想以“纯 SSIS 方式”执行此操作,则可以使用查找组件。将“不匹配的行”处理程序设置为“重定向到不匹配的输出”,并将目标表配置为连接。然后只使用“无匹配输出”,忽略“匹配输出”。并将“无匹配输出”中的记录发送到目标。

尽管它的名字,“查找”组件在许多情况下可用于过滤数据。

但我认为 Execute SQL 任务对于大型数据集会更有效,将所有数据保留在数据库引擎中。

于 2013-11-08T09:22:14.063 回答