2011-03-18 98 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