2017-09-26 42 views
0

我有一張表,其中包含兩個我關心的char列,namevalue。第二列只有兩種類型的字符串,形式爲'######',形式爲'#####/#####'。顯然,如果不是第二種數據類型,第二列應該是一個int。SQL Server選擇在表格變量上的表現與實際表格不同

根據評論,這裏是一個示例表。

 
[name] [value] 
ABC1 25 
ABC2 13/45 
ABC3 12/6 
ABC4 15 
ABC5 89 
XYZ1 89 
XYZ2 14 
XYZ3 52 
XYZ4 13 
XYZ5 11 

我需要從它的name包含'XY'value小於50表中刪除所有行。爲了確定我需要刪除這行,我可以運行

SELECT * FROM table WHERE name LIKE 'XY%' AND CONVERT(int,value)<50 

返回

 
[name] [value] 
XYZ2 14 
XYZ4 13 
XYZ5 11 

然而,我過於謹慎,並傾向於在可變第一,確保一個表執行刪除操作我沒有忽略任何東西。如果我首先將表中的所有數據插入到@TempTable中,並且運行類似select語句,則查詢在value = '13/45的行上失敗。 Conversion failed when converting the varchar value '13/45' to data type int.

是否有一些表變量會導致SQL Server查詢它與標準表不同?

+2

樣本數據...預期輸出......你當前的查詢......任何錯誤,將有助於 – scsimon

+0

試圖把提交您插入的數據不是Temptable –

+0

@MohamedFadhl表變量不使用交易之後。談到這一點,OP-你的問題是什麼?它依賴於交易嗎? – zambonee

回答

1

既然你是在2014年,你可以使用TRY_PARSE。如果某個值無法解析爲指定的數據類型,它將返回NULL。

select * 
from YourTable 
where Name like 'XY%' 
    and TRY_PARSE([value] as int) < 50 
+0

還有一個問題:儘管2014年的工作有效,但我們只用2014進行測試和開發。令人煩惱的是,我們的生產服務器仍在運行2008. – user741172

+0

..添加VALUE的where子句而不是「%/%」而不是? – SqlACID