在ssis组件OLE DB命令中:
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' )
, ?)
当我尝试保存它时,我收到一个错误:'插入值列表与列列表不匹配',虽然当我在Management Studio中运行此脚本时,它可以正常工作。
有什么问题?
UPD:我在哪里替换'?'它可以正常工作:o
答案 0 :(得分:1)
您遇到的问题是两件事之一。您没有在执行SQL任务中设置参数映射,或者未在同一任务的设置中设置 BypassPrepare 设置,这很可能就是这种情况。
我设法重新创建了您的错误,并绕过它。我遵循的步骤如下:
有关此特定属性的信息(在不同的上下文中使用,但具有相同的一般功能),请参阅:http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dts.tasks.executesqltask.executesqltask.bypassprepare.aspx
<强>更新强>
给出的解决方案是针对SQL执行任务,而不是针对OLE DB命令。改变'?'的位置OP所述的前面SQL查询中的值参数解决了这个问题。
另一种选择是回到调用存储过程。