2010-12-01 6 views
0

ヌルではない、と私はこの問題は、手続き値にデフォルト設定されていないに渡される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値がストアドプロシージャパラメータにに割り当てられた値にデフォルト設定されたと仮定し、それはそれはあなたが合格値をとるパラメータとして存在している場合、これは示しています。SQLでの設定がありますサーバーはこの動作を変更できますか?

答えて

2

空の文字列 ''はNULL値と同じではありません。

だから、

(@myVar varchar(MAX) = '') 

は、あなたが引数に渡さないときは、順番にあなたが言うとき意味@myvar、空の文字列を取得することを意味言うところ

Where @myVar Is Null 

は、最初のテストケースのように、ヌル引数を明示的に渡した場合にのみtrueと評価されます。

3

デフォルト値は、プロシージャコールからパラメータを省略した場合にのみ割り当てられます。プロシージャー内のパラメーターがヌルであるかどうかをテストし、必要なデフォルト値を割り当てることができます。

declare @var varchar(MAX) 
select @var = ISNULL(@myVAR, '') 
4

nullは、それ自体がSQLの変数またはフィールドの有効な値であるため、null値はデフォルトに設定されません。

パラメータがデフォルト値になるようにするには、パラメータをまったく渡さないでください。あなたのprocのために:

-- @myVar will get default 
EXEC TestVarcharMaxIsNull 
-- @myVar will be null 
EXEC TestVarcharMaxIsNull @myVar=NULL 
-- @myVar will be "Hello" 
EXEC TestVarcharMaxIsNull @myVar='Hello' 
関連する問題