【问题标题】:How to pass multiple values in where statement in SSIS variable?如何在 SSIS 变量的 where 语句中传递多个值?
【发布时间】:2023-04-11 00:16:02
【问题描述】:

我正在创建一个 SSIS 包,它有两个变量,它们将值分配给另一个 SQL 命令变量。数据源是 ODBC 连接器,目标是 OLEDB 连接器。

变量名称:

  • vPurchaseType(多个值)
  • vTransactionDate(单值)
  • vPSourceQuery(接收其他两个变量的 SQL 语句)

一个变量是一行,这个变量正在工作。另一个变量是要在IN 子句中提取的多个值。但是我无法在这个中传递多个值,我已经尝试过Single rowFull 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


【解决方案1】:

基本上,我使用的是来自MyTecBits - SQL Server: Concatenate Multiple Rows Into Single String 的这篇文章的解决方案,并将其应用于我的变量vPurchaseType,并以Single Row 的形式接收值。但是我不得不稍微改变一下查询,使用函数CAST AS VARCHAR (4000) 来接受我列中的所有数据。

之后我更改了我的Data Flow,并将OLEDB Destination 转换为ADO Net Destination,我还必须将选项ValidadeExternalMetadata 标记为False,就是这样!现在正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多