将guid转换为字符串时出现SQL错误

时间:2016-10-19 23:57:01

标签: sql-server ssis sql-server-2012

我正在使用SSIS包,我使用OLE DB Source组件和以下SQL查询:

DECLARE @ConnectedGUIDS nvarchar(200);

SELECT @ConnectedGUIDS = COALESCE(@ConnectedGUIDS + ',', '') + convert(nvarchar(36), Record2Id)
FROM ConnectionBase 
WHERE Record1Id = CAST(? AS CHAR(36));

SELECT DISTINCT(Record1Id) AS ContractGUID,  
       @ConnectedGUIDS AS ConnectedGUIDs 
FROM ConnectionBase 
WHERE Record1Id = CAST(? AS CHAR(36));

当我尝试运行包时,它在预执行阶段失败,并出现以下错误:

  

错误:0xC0202009在Stage DB中更新已连接的合同,Get   从CRM DB [5]连接的合同:SSIS错误代码DTS_E_OLEDBERROR。   发生OLE DB错误。错误代码:0x80040E14。 OLE DB记录   是可用的。来源:" Microsoft SQL Server Native Client 11.0"   Hresult:0x80040E14说明:"转换时转换失败   从字符串到uniqueidentifier。"。错误:0xC004701A at   在Stage DB,SSIS.Pipeline中更新已连接的合同:获取连接   来自CRM DB的合同未能执行预执行阶段并返回错误   代码0x80040E14。

这些是我的类型:

  • ?是在循环容器中映射的参数,它是GUID的字符串表示
  • Record1Iduniqueidentifier
  • Record2Iduniqueidentifier

如果我更换

CAST(? AS CHAR(36))

CAST('9C5D6FA0-4EBD-41F6-9D31-FB62A885CEC6' AS CHAR(36))

我可以在SQL Server Management Studio中运行相同的查询而不会出现任何问题。 我在另一个SSIS包中有完全相同的查询,并没有造成任何问题。

我做错了什么?

0 个答案:

没有答案