2011-03-18 99 views
1

当我做SQL奇怪的错误:错误的转换数值

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山口数据类型为nvarchar(MAX)

我有错误消息:

消息245,级别16,状态1,行2错误转换值nvarchar的 “davl> 40”到数据类型位。注意! NULL不包括在 聚合或其他操作SET中。

davl> 40是由胶原和XDeltaIntervals它是为nvarchar,我不能明白的地方我试图将其转换为位:S

我怎样才能避免这种请求,从上校第二部分转换工会的位?

+3

'Changes.InitialValue'是什么类型?如果它是一种类型,你有你的答案。 – Oded 2011-03-18 13:39:34

+0

@Bjorkey Col列的类型是什么? – 2011-03-18 13:41:27

+1

查询中哪一列是“bit”?除非你向我们提供了不完整的查询,因此这个问题与你在运行时实际查询的其他部分有关,否则不可能有任何尝试将'Col'从下半部分转换为'bit'错误(以及有关此事的警告)。 – 2011-03-18 14:36:39

回答

1

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

如果是这样尝试EXEC sp_refreshview 'dbo.XDeltaIntervals'

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语句的值。

+4

这是不正确的。 'select'x'UNION ALL SELECT 1'给出'当转换varchar值'x'为数据类型int.'时转换失败,它将关闭数据类型优先。 – 2011-03-18 13:46:32

+0

与此相同的错误。 – Cynede 2011-03-18 13:53:48

1

它看起来好像>在实际的列名“山口”字被解释为操作员。如果将列名称包装在括号[]中,会出现什么情况?

+0

但是,如果是这样的话,那么当这个特定的选择单独运行时它不应该也会中断吗? – 2011-03-18 14:43:04

+0

不知道 - 这取决于问题发生的地点/时间,如果这是问题所在 - 但是在[]列名中包含“>”并不会伤害到 - 并且如果这没有好处,那么我会从列名称中删除“>”。 – Tim 2011-03-18 16:03:44