在下面的查詢事件中,儘管賦值爲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
在下面的查詢事件中,儘管賦值爲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
SQL Server隱式地將空字符串轉換爲0,所以這就是爲什麼你會得到這個結果。
看起來好像這個問題,也提出了在這裏:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=155339
我從這個論壇robvolk的響應引述如下:
「然後使用顯式類型轉換爲羅素你不能控制服務器的隱式轉換機制,你只能解決它。「
感謝您的詳細解釋和有用的鏈接。 –
你不能檢查一個字符串整數值。如下所示更改查詢。然後它開始給出錯誤。 「將varchar值'Test'轉換爲數據類型int時轉換失敗。」
**declare @param int
set @PARAM=0
select @PARAM
SELECT @PARAM = CASE WHEN @PARAM='' THEN 'Test' ELSE @PARAM END
select @PARAM**
雖然這個問題沒有做到。空字符串轉換爲「0」。所以他們正在做'SELECT CASE',當0 =''THEN NULL ELSE 0 END'時,它不會導致運行時錯誤並進入'CASE'的第一個分支。 –
爲什麼比較'integer'參數爲'varchar' ?? –
@ConradFrix它也給你同樣的o/p。清除第一個選擇參數並檢查。 –
檢出http://stackoverflow.com/questions/4147215/how-int-database-field-gets-compared-to-varchar-type然後嘗試'選擇convert(int,'')' – Brad