如果您使用数据流任务并使用 OLE DB 源,并且您需要参数化您的查询:
- 创建变量以保存“完整”的查询语句:右键单击包外的空白区域 - 然后单击变量:

单击变量窗口上的添加变量:

使名称是SQL_DTFLOW_FULL
或您可以轻松理解的名称。variable data type
是_STRING
- 创建变量以保存您的参数。
即,完整的查询语句是:
SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter
在上面的示例中,我只有一个参数:@BookID,所以我需要创建一个变量来保存我的参数。添加更多变量取决于您的查询。

给它起名字SQL_DTFLOW_BOOKID
variable data type
是_STRING
因此,您需要使您的 SSIS 整洁,并且变量按可理解的部分进行排序。
尝试使变量名称为SQL_{TASK NAME}_{VariableName}
- 为
SQL_DTFLOW_FULL
变量创建表达式,单击数字 1,然后开始填充数字 2。使用字符串块使您的 SQL 语句成为正确的 SQL 语句。字符串块通常在开头和结尾使用“双引号”。将变量与字符串块连接起来。

单击评估表达式,以显示结果,以确保您的查询正确,将查询结果复制粘贴到 SSMS。
使用您自己的逻辑确保变量不受 SQL 注入的影响。(利用你的开发者直觉)
- 打开数据流任务,双击项目打开 OLE DB 源编辑器。

- 选择数据访问模式:
SQL Command From Variable
- 选择变量名称:
SQL_DTFLOW_FULL
- 单击预览以确保其正常工作。
这就是我防止这种 SSIS 失败案例的全部方法。由于我使用这种方式,我从来没有遇到过这个问题,你知道,SSIS 有点奇怪。
SQL_DTFLOW_FULL
要更改变量值,请在数据流任务之前设置它,每次更改变量值时,变量的 SQL 结果都会发生变化。