首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SSIS错误:插入值列表与列列表不匹配

SSIS错误:插入值列表与列列表不匹配
EN

Stack Overflow用户
提问于 2012-11-02 10:45:28
回答 1查看 900关注 0票数 1

在ssis组件OLE命令中:

代码语言:javascript
代码运行次数:0
运行
复制
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

EN

回答 1

Stack Overflow用户

发布于 2012-11-02 11:39:26

你正在经历的问题是两件事之一的结果。或者您没有在执行SQL中设置参数映射,或者没有在相同任务的设置中设置BypassPrepare设置,这很可能是这种情况。

我成功地重新创建了你的错误,并绕过了它。我遵循的步骤如下:

  1. 使用查询中指定的两个表重新创建DB。用硬编码值对其进行测试,以确保其工作正常。
  2. 在我的包中添加了两个变量-- BaseID & DirectoryID,并给出了一些默认值。
  3. 创建并将查询添加到SQLStatement.
  4. 转到参数映射,并映射两个变量,指定 & 1的参数名称。此时,我的BypassPrepare选项被设置为False,运行该任务将导致您所收到的确切错误。
  5. BypassPrepare选项设置为True。执行该任务会导致成功,并将一行添加到DB中,而不会出现任何问题。

有关此特定属性的信息(在不同的上下文中使用,但具有相同的通用功能),请参阅:http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dts.tasks.executesqltask.executesqltask.bypassprepare.aspx

更新

给出的解决方案是针对SQL执行任务,而不是针对OLE命令。更改“?”的位置如OP所述,SQL查询中的值参数可用于解决此问题。

另一种选择是返回到调用存储过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13193693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档