SSIS“列”和“参数”无法在Unicode和非Unicode字符串数据类型之间转换

时间:2019-02-01 22:39:29

标签: sql sql-server ssis etl oledbcommand

我有一个执行此任务的数据流任务:

  1. 从两个不同的OLE DB源中,运行SQL命令以选择一些数据
  2. 合并合并两个数据库源
  3. 查找其他SQL DB源,检查数据是否已存在
  4. 基于查找匹配输出vs.查找不匹配输出,使用不同的输入参数运行INSERT语句。

enter image description here

问题是,在插入过程中,它抱怨列'a'和参数'1':

  

无法在Unicode和非Unicode字符串数据类型之间进行转换。

我查找了这个StackFlow建议,将列'a'更改为(DT_WSTR)字符串。但是,该列已被设置为该数据类型。

列“A”实际上没有直接从数据库抓取,而是恒定的值

SELECT 'abc'+ FORMAT(GETDATE(),'yyyyMMdd') + 'zz208874' AS a

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

我认为主要问题是如何在OLEDB Command中解析查询以及SQL Server数据库引擎如何定义参数数据类型。

尝试使用CAST()函数来避免这种情况:

 SELECT CAST('abc'+ FORMAT(GETDATE(),'yyyyMMdd') + 'zz208874' as VARCHAR(255)) AS a

或者,如果您希望转换为unicode:

SELECT CAST('abc'+ FORMAT(GETDATE(),'yyyyMMdd') + 'zz208874' as NVARCHAR(255)) AS a

或者,您可以将字符串定义为Unicode:

SELECT N'abc'+ FORMAT(GETDATE(),'yyyyMMdd') + N'zz208874' AS a

有关参数数据类型解析问题的更多信息,可以检查以下问题的答案: