時,轉換失敗只有當我從視圖聯合選擇語句(它自己可以正常工作)時,纔會發生這種情況,並且使用硬編碼返回的Select語句一個特定的行。將varchar值'1 BOX'轉換爲數據類型int
Select * From View
UNION ALL
Select 'text' as Col1, 'text1' as Col2
這只是讓你知道我在做什麼。
當獨立運行時,兩種語句都可以很好地工作。
謝謝!
時,轉換失敗只有當我從視圖聯合選擇語句(它自己可以正常工作)時,纔會發生這種情況,並且使用硬編碼返回的Select語句一個特定的行。將varchar值'1 BOX'轉換爲數據類型int
Select * From View
UNION ALL
Select 'text' as Col1, 'text1' as Col2
這只是讓你知道我在做什麼。
當獨立運行時,兩種語句都可以很好地工作。
謝謝!
你需要明確轉換類型的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比字符類型更喜歡數字類型,因此您可能會遇到轉換問題。
問題是,在視圖中,我在一個數字列中有幾個非數字值。我沒有明確地設置這個列的數據類型,而SQL自己處理它,所以我沒有意識到這種情況。
當聯合的第二部分在同一列中返回一個數值時,這只是一個問題。
我必須逐行檢查數據,以確定問題所在。
是視圖的列文本還是整數? (必須是匹配的數據類型...) – jarlh
它與視圖中的前兩列匹配,顯然不是varchar,而是使用兩個硬編碼的變量int。 –