2010-11-03 38 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