【发布时间】:2023-04-11 00:16:02
【问题描述】:
我正在创建一个 SSIS 包,它有两个变量,它们将值分配给另一个 SQL 命令变量。数据源是 ODBC 连接器,目标是 OLEDB 连接器。
变量名称:
- vPurchaseType(多个值)
- vTransactionDate(单值)
- vPSourceQuery(接收其他两个变量的 SQL 语句)
一个变量是一行,这个变量正在工作。另一个变量是要在IN 子句中提取的多个值。但是我无法在这个中传递多个值,我已经尝试过Single row 或Full result set,但也不起作用。
第一个变量结果(vPurchaseType):
查询示例:
SELECT Head FROM TableB
| Head |
|---|
| 12 |
| 9C |
| AA |
第二个变量必须在单引号之间才能起作用。
第二个变量结果(vTransactionDate):
查询示例:
SELECT Head FROM TableA
| Head |
|---|
| 2020-01-01 |
第三个变量:
SELECT
ColA,
ColB,
ColC,
ColD
FROM TableC
WHERE ColC >= '"+ @[User::vTransactionDate] + "'
AND ColD IN ("+ @[User::vPurchaseType] +")
我的包裹:
【问题讨论】:
-
你不能——至少不是你做事的方式。填充 vPurchaseType 的源 RDBMS 是什么?
-
那很糟糕。你能给我指路吗?我是 SSIS 的新手。来源是 Teradata。
-
为什么要注入而不使用参数?
-
抱歉,@Larnu 是什么意思?我使用的唯一参数是权限(用户和密码),SQL 脚本是变量。
-
ColC >= '"+ @[User::vTransactionDate] + "'即注入。您正在将变量 注入 到字符串中。一个主要安全漏洞。总是,总是,总是参数化。
标签: sql-server tsql ssis