簡體   English   中英

存儲過程中的默認null值不為Null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM