SQL奇怪的错误:转换值时出错

时间:2011-03-18 13:35:08

标签: sql tsql sql-server-2008

当我这样做时

SELECT RecTime, CAST(ID as nvarchar(MAX)) AS Col, InitialValue FROM [dbo].[Changes] 

我没有错误

当我这样做时

SELECT RecTime, Col, InitialValue FROM [dbo].[XDeltaIntervals]

我没有错误

但是当我做的时候

SELECT RecTime, CAST(ID as nvarchar(MAX)) AS Col, InitialValue 
FROM [dbo].[Changes]
        UNION ALL
   SELECT RecTime, Col, InitialValue FROM [dbo].[XDeltaIntervals]

来自XDeltaIntervals的Col是nvarchar(MAX)

我收到了错误消息:

  

消息245,级别16,状态1,行2转换值nvarchar时出错   “davl> 40”到数据类型位。注意! NULL被排除在外   聚合或其他操作SET。

davl> 40是来自XDeltaIntervals的Col,它是nvarchar,我无法理解我在哪里将它转换为位:S

如何避免将Col从第二部分转换为bit的请求?

3 个答案:

答案 0 :(得分:1)

您是否尝试过逆转UNION的顺序?

SELECT RecTime, Col, InitialValue
FROM [dbo].[XDeltaIntervals] 
UNION ALL
SELECT RecTime, CAST(ID as nvarchar(MAX)) AS Col, InitialValue
FROM [dbo].[Changes]

结果集的数据类型基于第一个SELECT语句的值。

答案 1 :(得分:1)

Attention! NULL is excluded in the aggregate, or other operations SET.似乎与您显示的查询没有任何关联。是这些观点中的任何一个吗?

若然,请尝试EXEC sp_refreshview 'dbo.XDeltaIntervals'

答案 2 :(得分:1)

看起来好像> “col”的实际列名中的字符被解释为运算符。如果将column-name包装在方括号[]中,该怎么办?