2010-11-03 36 views
1

我正在編寫一個sql腳本,並且我想使用Management Studio來開發查詢,並使用C#程序在生產環境中運行它。SQL變量;聲明何時不存在參數

我的查詢包含參數,就像這樣;

SELECT * FROM TABLE 
WHERE id = @id 

我可以在C#程序中輸入@id的值,這很好。但是,我也想在Management Studio中聲明測試的默認值。所以我真的想寫這樣的僞代碼;

if not declared @id 
    declare @id int 
    set @id=43 
end if 

SELECT * FROM TABLE 
WHERE id = @id 

是否有任何方法來檢查是否已經採取變量名?

回答

1

我已經設法通過在腳本中標記默認變量來取得一些進展,就像這樣;

/** DEFAULTS **/ 

declare @id int 
set @id = 43 

/** END DEFAULTS **/ 

然後在我的C#程序中預處理腳本,如此;

script = RemoveBlock(script, "DEFAULTS"); 

並執行如此的功能;

public static string RemoveBlock(string script, string blockName) 
{ 
    if (script == null) { return null; } 

    var startTag = string.Format("/** {0} **/", blockName); 
    var endTag = string.Format("/** END {0} **/", blockName); 

    var startTagIdx = script.IndexOf(startTag); 
    if (startTagIdx == -1) { return script; } 

    var endTagIdx = script.IndexOf(endTag, startTagIdx + startTag.Length); 
    if (endTagIdx == -1) { return script; } 

    var endOfEndTag = endTagIdx + endTag.Length; 

    var beforeBlock = script.Substring(0, startTagIdx); 
    var afterBlock = script.Substring(endOfEndTag); 

    return beforeBlock + afterBlock; 
} 

所以C#程序運行一個沒有變量但帶參數的版本。

4

你不能完全按照你的想法去做。我建議之一:

1)包裹起來腳本作爲一個存儲過程,並給默認的PARAMS
2)包括您可以在SSMS然後取消註釋運行時,腳本的頂部註釋塊:

/* 
-- Default variables for testing 
DECLARE @Id INTEGER 
SET @Id = 43 
*/ 
SELECT * FROM Table WHERE id = @Id 
+0

嗨。我有類似的想法...我無法修改數據庫,所以我不能把它寫成SP;評論區塊是我目前的方式。 – 2010-11-03 10:05:21

+0

一個建議:使用 - 而不是/ *,因此您可以在管理工作室中使用註釋和取消註釋工具欄按鈕。 – 2010-11-03 10:23:31