SQL Server char(1)转换

时间:2016-07-15 16:22:05

标签: sql-server sql-server-2012

表A中的

我有一个名为 flag 的char(1)列可以为空。 在表B中,我还有一个不可为空的char(1)列,因此我想在将表A中的数据插入表B之前使用ISNULL,COALESCE或CASE为NULL设置显式值

像这样:

OUTER APPLY (VALUES(COALESCE(A.flag,CAST('0' AS char(1))))) AS AP(flag)

问题是,SQL Server返回以下错误消息:

  

查找错误 - SQL Server数据库错误:转换失败时   转换varchar值' X'数据类型int。

有些行的值为' X'在表A但为什么SQL Server尝试将char(1)列转换为int?当我只运行SELECT语句(没有插入)时,我没有收到错误。

到目前为止我做了什么:

  • 我已经检查了INSERT中的列的编号和顺序 SELECT-声明
  • 我已经检查过,所选列和插入列都是borth 炭(1)
  • 我已将COALESCE从SELECT-Clause移至APPLY
  • 我已添加OPTION(重新编译)
  • 插入表B上没有触发器
  • 我已将SET SHOWPLAN_XML设置为ON 我找不到任何转换之类的 转换DataType =" char"或转换DataType =" int"
  • 重新创建了Insert-Table B
  • 我已将源列名A.flag替换为文字' - ' INSERT在这里工作! 所以flag-Column必定存在问题。

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:0)

我发现,引用该表的其中一个视图是一个索引视图。索引视图中的WHERE-Clause是错误的。 过滤谓词是一个int而不是char(1)。在对此进行处理后,插入工作正常。