我使用简单的DFT创建了一个SSIS软件包,并将文件从OLEDB源传输到OLEDB目标。当我在源表软件包中添加新列时,仍将成功执行,但我希望我的软件包失败。任何人都可以建议如何修复它。
在控制流动区域中,在DFT之前添加Execute SQL Task
。设置与数据库的连接,并为您的sqlStatement使用以下内容:
CREATE TABLE #temp (<define all columns currently in your OLEDB Source Table>)
INSERT INTO #temp
SELECT TOP 1 *
FROM <your OLEDB Source Table>
通过使用此"最糟糕的练习"插入语法,如果您的OLEDB源表已添加或删除任何列,则可能会导致故障。
在OLEDB源中选择表时,表的元数据映射到OLEDB Source
组件。
每次您运行的软件包,都会将SELECT * From Table
命令发送到SQL Server,并检索数据,并且将将每个列从SQL表映射到OLEDB Source
列。
如果在SQL中找到了列,并且在OLEDB Source
中未定义它将被忽略。另一方面,如果在SQL中找不到列,并且在OLEDB Source
中定义了一个例外。
在运行软件包之前验证元数据的唯一方法是添加
Execute SQL Task
或Script Task
在执行DFT
之前检查元数据。
参考
- SSIS OLE DB源编辑器数据访问模式:" SQL命令"与"表或查看"
- OLEDB来源