2015-11-23 89 views
-3

時,轉換失敗只有當我從視圖聯合選擇語句(它自己可以正常工作)時,纔會發生這種情況,並且使用硬編碼返回的Select語句一個特定的行。將varchar值'1 BOX'轉換爲數據類型int

Select * From View 
UNION ALL 
Select 'text' as Col1, 'text1' as Col2 

這只是讓你知道我在做什麼。

當獨立運行時,兩種語句都可以很好地工作。

謝謝!

+4

是視圖的列文本還是整數? (必須是匹配的數據類型...) – jarlh

+0

它與視圖中的前兩列匹配,顯然不是varchar,而是使用兩個硬編碼的變量int。 –

回答

3

你需要明確轉換類型的union第一部分:

select cast(col1 as varchar(255)) as col1, cast(col2 as varchar(255) as col2 
from view 
union all 
select 'text', 'tex1'; 

作爲排序在documentation解釋說:

是查詢規範或查詢表達式返回數據要結合 與來自另一個查詢規範的數據或查詢 的表達式。作爲UNION 操作一部分的列的定義不必相同,但它們必須通過隱式轉換兼容 。當數據類型不同時,產生的 數據類型根據數據類型優先級的規則確定。 如果類型相同但精度,比例或長度不同,則結果將根據組合 表達式的相同規則確定。有關更多信息,請參見精度,比例和長度 (Transact-SQL)。

我第一個承認這不是100%清楚。但是,類型優先規則意味着SQL Server比字符類型更喜歡數字類型,因此您可能會遇到轉換問題。

0

問題是,在視圖中,我在一個數字列中有幾個非數字值。我沒有明確地設置這個列的數據類型,而SQL自己處理它,所以我沒有意識到這種情況。

當聯合的第二部分在同一列中返回一個數值時,這只是一個問題。

我必須逐行檢查數據,以確定問題所在。

相關問題