2011-12-09 114 views
1

我必須實現一個模塊,該模塊需要一些變量聲明作爲參數。我必須找到驗證這些變量的方法,以便我沒有預先定義它們。查找是否定義了變量

declare @var int 
set @var = 1 

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

我想你需要給出一些更詳細的信息,說明你爲什麼需要這樣做,以及你如何傳遞你提到的「參數」。聲明一個變量兩次是一個編譯錯誤,所以你不能在運行時捕獲它。 – 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 

即使參數是可選的,它們仍然是decalred並且具有默認值(在這種情況下爲NULL)。所以,你不需要檢查聲明,只需要檢查值。

1

你不能ComplieRunSql Server Management Studio的Sql語句。

說,在JS你可以編譯/執行代碼塊有一個未聲明的變量,並可以檢查變量是否聲明或不使用typedef,但在Sql Server中是不可能的,直到當前版本。謝謝你的時間。