2011-12-09 14 views
1

パラメータとしていくつかの変数宣言が必要なモジュールを実装する必要があります。私はそれらの変数を検証する方法を見つけなければならないので、私はそれらをあらかじめ定義していませんでした。それは、コードを実行する前にvariabileが定義されているかどうかを調べる

declare @var int 
set @var = 1 

if isdeclared(@var) == 0 
begin 
    declare @var int 
    print @var 
end 
print @var 
+1

私はあなたがこれを行う必要がある理由と、あなたが言及した "パラメータ"をどのように渡しているかについて、より詳細な説明をする必要があると思います。変数を2回宣言するのはコンパイルエラーなので、実行時にCATCHすることはできません。 – Pondlife

答えて

4

SQL Serverは、変数宣言のコードを解析します。

このコードは、変数は、変数を宣言したコードが実行されることはありません場合でも、宣言している

if 1 = 0 
begin 
    declare @var int 
    print @var 
end 
print @var 

うまく動作します。

あなたがしたいことは、変数が割り当てられているかどうかをテストすることです。

if 1 = 0 
begin 
    declare @var int 
    set @var = 1 
    print @var 
end 

if @var is null 
begin 
    set @var = 2 
end 

print @var 
2

私はあなたがmoduleによって何を意味するか、完全に一定ではないんだけど、あなたはストアドプロシージャを作成する場合は、変数は、そのスコープ内に存在するものの特定することができます。

CREATE PROCEDURE myStoredProcedure (@var1 AS INT = NULL, @var2 AS INT = NULL) 
AS 
BEGIN 

    DECLARE @var3 INT 

    IF (@var1 IS NULL) 
    SET @var3 = 'Nothing was passed in for @var1' 

    IF (@var1 IS NULL AND @var2 IS NULL) 
    SET @var3 = @var3 + ', ' 

    IF (@var2 IS NULL) 
    SET @var3 = @var3 + 'Nothing was passed in for @var2' 

    SELECT 
    @var1, @var2, @var3 

END 

パラメータはオプションですが、デカールされ、デフォルト値(この場合はNULL)を持ちます。したがって、宣言をチェックする必要はなく、値のみをチェックする必要があります。

1

ComplieまたはRunのSql文を使用することはできません。

JSで宣言されていない変数を持つコードブロックをコンパイル/実行し、変数が宣言されているかどうかをtypedefで確認できますが、Sql Serverでは現在のバージョンまではできません。御時間ありがとうございます。

関連する問題