25

私はこれを読みました:Sqlサーバー文字列がnullまたは空かどうかを確認する方法はありますが、この状況では役に立ちませんでした。

私のストアドプロシージャからのコード:

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0)
        SELECT @sql = 'SELECT * FROM TEST1'
    ELSE
        SELECT @sql = 'SELECT * FROM TEST2'
 PRINT @sql;

@item1NVARCHAR(1000)タイプです。

このストアド プロシージャを実行すると、item1

EXEC    [dbo].[my_proc]
        @item1 = N''

それが示している

SELECT * FROM TEST1// 正しい場合@item1 = N'some'

それ以外の

SELECT * FROM TEST2

文字列がnullまたは空であるかどうかを確認するのは、SQLのどこかの関数ですか、それともどこかで間違いを犯しましたか?

C# のように ->string.IsNullOrEmpty(myValue)

4

3 に答える 3

45

それが正しい行動です。

@item1を値に設定すると、以下の式が true になります

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0)

とにかく、SQL Server にはそのような関数はありませんが、独自の関数を作成できます。

CREATE FUNCTION dbo.IsNullOrEmpty(@x varchar(max)) returns bit as
BEGIN
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
    RETURN 0
ELSE
    RETURN 1
END
于 2012-09-04T13:34:57.100 に答える
4

もちろん、それは機能します。の場合@item1 = N''、それでIS NOT NULL

@item1ストアド プロシージャの先頭にデフォルトでasを定義NULLし、パラメータを渡さないようにすることができます。

于 2012-09-04T13:35:02.153 に答える