gpt4 book ai didi

sql-server - 从 ssis 中的单行结果集中分配值在 SSIS 2012 中给出错误

转载 作者:行者123 更新时间:2023-12-02 06:30:38 26 4
gpt4 key购买 nike

我正在尝试从 sql server 的表中获取 CSV ID,并将结果分配给变量。下面是我在 Execute SQL Task

中放入的 sql
set nocount on
declare @csv varchar(max) = ''
select @csv = @csv + cast(companyid as varchar(10)) + ',' from company where isprocessed = 0
select substring(@csv,1,len(@csv) - 1) as companyids

如您所见,这是一种在 t-sql 中获取字段 csv 的简单标准方法。它在查询窗口中完美运行,但在 SSIS 2012 中运行任务时抛出以下错误

[Execute SQL Task] Error: The value type (__ComObject) can only be converted to variables of type Object.

[Execute SQL Task] Error: An error occurred while assigning a value to variable "sCSVCompanyIds": "The type of the value (DBNull) being assigned to variable "User::sCSVCompanyIds" differs from the current variable type (String). Variables may not change type during execution. Variable types are strict, except for variables of type Object. ".

下面是Execute SQL Task的设置

  1. General 选项卡中,Resultset 项目设置为单行
  2. Result Set 选项卡中,Result Name 设置为 0(我也尝试将其设置为 csvids,这是选择列表中的别名列名)和 Variable名称设置为 User::sCSVCompanyIds

我不知道为什么它不起作用。在浪费了这么多时间之后,我想出了一个艰难的方法,通过将结果返回为完整行集(相同的 SQL 总是返回 1 行 1 列)并为每个循环容器添加一个循环抛出结果集(它将始终迭代出于显而易见的原因只执行一次)并将结果集的字段分配给变量。它对我有用,但应该有简单的方法来做到这一点。我缺少什么?

最佳答案

问题出在 nvarchar(max) 数据类型上。我认为 varchar(max) 也是一样的。尽管 SSIS 中的相关数据类型是 DT_NTEXT 并且由于某种原因存在 DT_TEXT,但我们收到此错误。

有多种选择可以解决这个问题。

当然,可能有更合适的方法来处理这个问题,方法是将查询中的列强制转换/转换为固定长度而不是最大长度,例如 cast(myvarcharmaxfield as varchar(8000))。就我而言,它不起作用,因为我希望字符串长度更大。我从一个唯一标识符列生成一个 csv 字符串,它本身是 36 个字符长的字符串,需要 3 个额外的字符来用单引号和逗号作为分隔符引用它们,这将只支持 205 个值。所以它对我不起作用。

所以我别无选择,只能坚持我已经实现的方式,这是我的问题

After wasting so much time I am worked out a hard way which by returning the result as Full Row set (same SQL which returns 1 row 1 column always) and add a for each loop container to loop throw the result set (which will always iterates only once for obvious reasons) and assign the result set's fields to the variable

我学到的新方法来自 this question 的一个未被接受的答案

将 Oledb 连接更改为 ADO.NET 连接

我认为这很公平,但它需要我创建另一个连接管理器(这样我就不必更改所有现有任务)并将其用于此类我需要 csv 但我没有购买它的任务因为我几乎没有时间研究创建它的连接字符串,在我看来,我得到的错误类型与 oledb 不同。

关于sql-server - 从 ssis 中的单行结果集中分配值在 SSIS 2012 中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com