SSIS值类型ComObject只能转换为Object类型的变量

时间:2018-11-14 16:19:59

标签: sql sql-server tsql ssis casting

我有以下通过SSIS Execute调用的SQL语句:

  SELECT DISTINCT [ICDM_Log_Paths] = STUFF((SELECT ' ' + [ICDM_Log_Paths]+ '|' 
    FROM dbo.[tblTmpICDM_Log_Paths] 
    FOR XML PATH('')), 1, 1, '')
FROM dbo.[tblTmpICDM_Log_Paths] AS t

但是,当我分配给结果集和String变量时,会收到错误消息:

[执行SQL任务]错误:值类型(__ComObject)只能转换为Object类型的变量。 [执行SQL任务]错误:为变量“ FileName”分配值时发生错误:

“分配给变量” User :: FileName“的值(DBNull)的类型不同于当前变量类型(String)。变量在执行期间可能不会更改类型。变量类型是严格的,除了type变量宾语。 “。

使用STUFF时,如何将选择内容转换为NVARCHAR?

我已经尝试了以下方法,但没有用:

  SELECT DISTINCT [ICDM_Log_Paths] = STUFF((SELECT ' ' + CAST([ICDM_Log_Paths] AS nvarchar(500))+ '|' 
    FROM dbo.[tblTmpICDM_Log_Paths] 
    FOR XML PATH('')), 1, 1, '')
FROM dbo.[tblTmpICDM_Log_Paths] AS t

2 个答案:

答案 0 :(得分:0)

如果您要返回多行,结果集将期望一个具有对象数据类型的变量。如果返回多行,请将结果类型设置为“完整结果集”,然后在“结果集”窗格中映射一个对象变量,然后将该变量分配为FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Me\\Working directory\\name.csv\\1.part'结果名称。如果仅返回1行,则可以使用“单行”结果集,并将变量分配为dd_all.compute()结果名称。另一个选项是将“结果集”设置为“无”,并在“参数映射窗格”中分配变量,并指定输出方向,0作为参数名称(对于第一个参数)和适当的日期类型。对于第二个选项,语法如下,其中0作为参数占位符(假设这是OLE DB连接)。

0

答案 1 :(得分:0)

我修复了\创建了一个变通办法,如果它可以帮助任何人。

1。根据以下内容创建了一个视图:

SELECT DISTINCT [ICDM_Log_Paths] = STUFF((SELECT ' ' + [ICDM_Log_Paths]+ '|' 
    FROM dbo.[tblTmpICDM_Log_Paths] 
    FOR XML PATH('')), 1, 1, '')
FROM dbo.[tblTmpICDM_Log_Paths] AS t
  1. 然后在SSIS中执行SQL任务:

    SELECT CAST(ICDM_Log_Paths AS nvarchar(500))AS附件 从dbo.vw_ICDM_Filepaths

对我有用。