在ssis组件OLE命令中:
insert into D_MAPPING_CLIENTS (ID, DIRECTORY_ID, SOURCE_ID, BASE_ID)
values (
case when exists ( select 1 from D_MAPPING_CLIENTS )
then ( select MAX(ID) + 1 from D_MAPPING_CLIENTS )
else 1
end
, ISNULL(?,
case when exists ( select 1 from D_MAPPING_CLIENTS )
then ( select MAX(DIRECTORY_ID) + 1 from D_MAPPING_CLIENTS )
else 1
end )
, ( select ID from D_SOURCES_CLIENTS where SOURCE = 'D:\load\1\clients.txt' )
, ?)
当我试图保存它时,我会得到一个错误:“Insert值列表与列列表不匹配”,尽管当我在Management中运行这个脚本时,它工作得很好。
有什么问题吗?
UPD:我在哪里取代最后的‘?就某种价值而言,它工作得很好:o
发布于 2012-11-02 03:39:26
你正在经历的问题是两件事之一的结果。或者您没有在执行SQL中设置参数映射,或者没有在相同任务的设置中设置BypassPrepare设置,这很可能是这种情况。
我成功地重新创建了你的错误,并绕过了它。我遵循的步骤如下:
有关此特定属性的信息(在不同的上下文中使用,但具有相同的通用功能),请参阅:http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dts.tasks.executesqltask.executesqltask.bypassprepare.aspx
更新
给出的解决方案是针对SQL执行任务,而不是针对OLE命令。更改“?”的位置如OP所述,SQL查询中的值参数可用于解决此问题。
另一种选择是返回到调用存储过程。
https://stackoverflow.com/questions/13193693
复制相似问题