在SSIS中使用OLE DB命令的查询中的多个参数

d29*_*907 1 sql parameters ssis task visual-studio-2010

我正在尝试使用OLE DB COMMAND在SSIS中进行此更新:

UPDATE 
TABLE_A
SET 
COLUMN_C = CONCAT(?,' ',?)
FROM 
TABLE_A INNER JOIN TABLE_B ON
TABLE_A.ID = TABLE_B.ID
Run Code Online (Sandbox Code Playgroud)

但是当我尝试映射参数时,我收到此消息:

“无法推导出参数类型,因为单个表达式包含两个未键入的参数”

我不知道此查询是否做错了什么,或者是否不可能在一个句子中使用多个参数。

我正在使用VS 2010

Ako*_*Ako 5

我喜欢@Billinkc的答案和评论。我只想表明有解决OLEDB提供程序限制的方法。

declare @a as varchar(100) = ?
declare @b as varchar(100) = ?
UPDATE 
TABLE_A
SET 
COLUMN_C = CONCAT(@a,' ',@b)
FROM 
TABLE_A INNER JOIN TABLE_B ON
TABLE_A.ID = TABLE_B.ID
Run Code Online (Sandbox Code Playgroud)


小智 5

使用SQL Server 2012及更高版本进行参数绑定

SQL Server 2012和更高版本已更改SQL解析器或优化器,以使用更严格的方法来确定未知参数输入类型。

这将导致SQL语句,例如“ WHERE col1> =?+?”。失败并出现诸如mx.ODBC.Error.ProgrammingError之类的错误:('42000',11503,“ [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无法推导出参数类型,因为单个表达式包含两个无类型参数“ @ P1”和“ @ P2”。”,10191)。

一个办法

  1. 使用显式强制转换来告诉SQL解析器右侧操作应使用哪种类型,例如“ WHERE col1> =?+ CAST(?int)”。这为第二个参数指定了显式类型,并允许解析器推断结果的类型,