我使用SQL Server 2012的T-SQL Case語句使用NEWID()作爲隨機源怪異行爲
如果我下面來獲得隨機十歲上下的號碼清單範圍在[1,3 ],它工作得很好:
SELECT TOP 100
ABS(CHECKSUM(NEWID()))%3 + 1 [value_of_rand]
FROM sys.objects
,我得到的好東西像這樣(所有的1和3之間)。
3
2
2
2
1
....etc.
但是,如果我再放入相同的鏈接隨機值函數的輸出轉換爲CASE語句,它顯然不會只生產值1,2,3。
SELECT TOP 100
CASE (ABS(CHECKSUM(NEWID()))%3 + 1)
WHEN 1
THEN 'one'
WHEN 2
THEN 'two'
WHEN 3
THEN 'three'
ELSE
'that is strange'
END [value_of_case]
FROM sys.objects
它輸出:
three
that is strange
that is strange
one
two
...etc
我在做什麼錯在這裏?
難道呈現當數它的舍入,但評估時,是不是?嘗試把它放在一個變量和調試/拋出你有「這很奇怪」的地方。 – Dane
如果我將它賦值給一個變量,然後對該變量執行case語句,那麼它工作正常,沒有奇怪。不過,我認爲你的調試方法是不可能的。我收到一條錯誤消息,說:「將一個值賦給一個變量的SELECT語句不能與數據檢索操作組合在一起。」如果我嘗試這樣做: DECLARE @a int;選擇@a =(ABS(校驗和(newid()))%3 + 1),CASE @a \t當1然後'1'當2當'兩'\t當3然後'三'\t ELSE'奇怪:'+ (@a as varchar(max))END – Anssssss
您可以隨時刪除整個'WHEN 3'的情況,並將'three'放入'ELSE'中 –