【问题标题】:SSIS 'Column' and 'Parameter' cannot convert between unicode and non-unicode string data typesSSIS 'Column' 和 'Parameter' 无法在 unicode 和非 unicode 字符串数据类型之间转换
【发布时间】:2019-06-26 12:51:08
【问题描述】:

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

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

问题是,在 INSERT 期间,它抱怨列 'a' 和参数 '1':

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

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

列 'a' 实际上并不是直接从数据库中抓取,而是一个常量值

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

知道我做错了什么吗?

【问题讨论】:

  • 验证并比较 2 个 OLE DB 命令的语句。目标列的数据类型是什么?

标签: sql sql-server ssis etl oledbcommand


【解决方案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

有关参数数据类型解析问题的更多信息,您可以查看我对以下问题的回答:

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2017-06-11
    • 2013-07-13
    • 1970-01-01
    • 2019-01-07
    • 2017-01-02
    • 1970-01-01
    • 2018-08-28
    • 2013-03-10
    相关资源
    最近更新 更多