2013-12-13 91 views
1

在下面的查詢事件中,儘管賦值爲0,條件@ PARAM =''返回true。 任何人都可以解釋爲什麼sql服務器將0視爲''以及如何處理這種情況?sql server NULL case handing

declare @param int 
set @PARAM=0 
select @PARAM 
SELECT @PARAM=CASE WHEN @PARAM='' THEN NULL ELSE @PARAM END 
select @PARAM 
+5

爲什麼比較'integer'參數爲'varchar' ?? –

+0

@ConradFrix它也給你同樣的o/p。清除第一個選擇參數並檢查。 –

+1

檢出http://stackoverflow.com/questions/4147215/how-int-database-field-gets-compared-to-varchar-type然後嘗試'選擇convert(int,'')' – Brad

回答

2

SQL Server隱式地將空字符串轉換爲0,所以這就是爲什麼你會得到這個結果。

看起來好像這個問題,也提出了在這裏:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=155339

我從這個論壇robvolk的響應引述如下:

「然後使用顯式類型轉換爲羅素你不能控制服務器的隱式轉換機制,你只能解決它。「

+0

感謝您的詳細解釋和有用的鏈接。 –

-1

你不能檢查一個字符串整數值。如下所示更改查詢。然後它開始給出錯誤。 「將varchar值'Test'轉換爲數據類型int時轉換失敗。」

**declare @param int 
set @PARAM=0 
select @PARAM 
SELECT @PARAM = CASE WHEN @PARAM='' THEN 'Test' ELSE @PARAM END 
select @PARAM** 
+0

雖然這個問題沒有做到。空字符串轉換爲「0」。所以他們正在做'SELECT CASE',當0 =''THEN NULL ELSE 0 END'時,它不會導致運行時錯誤並進入'CASE'的第一個分支。 –