[英]Default null values in stored procedures are not Null
我一直在測試錯誤的過程,但我意識到問題是傳入的Null值未默認為過程值...
Create Procedure TestVarcharMaxIsNull
(@myVar varchar(MAX) = '')
as
Select 'Hello' Where @myVar Is Null
Go
Exec TestVarcharMaxIsNull Null
Go
Exec TestVarcharMaxIsNull ''
Go
Exec TestVarcharMaxIsNull
Go
Drop Procedure TestVarcharMaxIsNull
輸出量
Run 1 - "hello"
Run 2 - ""
Run 3 - ""
我假設Null值默認為在存儲過程參數中分配的值,但是這表明它是否作為參數存在,並采用您傳入的值。SQLServer中是否有可以更改此行為的設置?
不,空值未設置為默認值,因為空值本身是SQL中變量或字段的有效值。
為確保參數獲得其默認值,請不要傳入任何參數。 所以對於您的過程:
-- @myVar will get default
EXEC TestVarcharMaxIsNull
-- @myVar will be null
EXEC TestVarcharMaxIsNull @myVar=NULL
-- @myVar will be "Hello"
EXEC TestVarcharMaxIsNull @myVar='Hello'
僅當您從過程調用中省略參數時,才分配默認值。 您可以在過程中測試參數是否為空,並為其分配所需的默認值。
declare @var varchar(MAX)
select @var = ISNULL(@myVAR, '')
空字符串“”不等於空值。
所以你在哪里說
(@myVar varchar(MAX) = '')
表示當您不傳遞參數時,您將在@myVar中獲得一個空字符串,這又意味着當您說
Where @myVar Is Null
僅當您顯式傳遞null參數時(如第一個測試用例),才會計算為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.