我试图做使用OLE DB命令在SSIS此更新:
UPDATE
TABLE_A
SET
COLUMN_C = CONCAT(?,' ',?)
FROM
TABLE_A INNER JOIN TABLE_B ON
TABLE_A.ID = TABLE_B.ID
但是,当我尝试我得到这个消息的参数映射:
“参数类型不能推导出因为单个表达包含两个无类型参数”
我不知道如果我做错了此查询,或者如果它是不可能在一个单句使用一个以上的参数。
我使用VS 2010
我试图做使用OLE DB命令在SSIS此更新:
UPDATE
TABLE_A
SET
COLUMN_C = CONCAT(?,' ',?)
FROM
TABLE_A INNER JOIN TABLE_B ON
TABLE_A.ID = TABLE_B.ID
但是,当我尝试我得到这个消息的参数映射:
“参数类型不能推导出因为单个表达包含两个无类型参数”
我不知道如果我做错了此查询,或者如果它是不可能在一个单句使用一个以上的参数。
我使用VS 2010
我喜欢@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
参数与SQL Server 2012的结合,后来
SQL Server 2012的后来更改了SQL解析器或优化器使用确定未知参数输入类型的一个更严格的方法。
“WHERE COL1> =?+?” 这将导致SQL语句,如 到失败,错误如mx.ODBC.Error.ProgrammingError:(“42000”,11503,“[微软] [ODBC用于SQL Server驱动程序11] [SQL Server]将参数类型不能推导出因为单个表达包含两个无类型参数, '@ P1' 和 '@ P2'“。,10191)。
一个解法
问题是元数据的一个。 SSIS,真正关心它。 CONCAT
,新在2012年,它让无论数据类型您连接一切,而不担心向后,以点净开发商的数据类型优先惊人。
我怀疑你需要
A)添加一个派生列转换创建连接的值。 是的,这意味着你必须检查空值,数据类型优先级和所有其他有趣的事情。
B)更新您的查询是这样的
UPDATE
TABLE_A
SET
COLUMN_C = ?
FROM
TABLE_A INNER JOIN TABLE_B ON
TABLE_A.ID = TABLE_B.ID
WHERE
SomethingUniquelyIdentifying = ?
然后映射从A你的价值),以0号顺序和重点业务的第二(否则你将在缓冲区中的每行中的每个值更新为当前值)