确定SQL查询是否具有命名参数的最佳方法

时间:2013-02-22 01:29:08

标签: sql sql-server regex

我已经通过Google和Stack Overflow进行了大量搜索,如果有答案,我无法提出一个搜索查询,它可以为我提供答案。< / p>

我正在构建一个在我的ASP.net网站中使用的函数模块来处理连接到Microsoft SQL Server DB和执行查询的所有脏工作。我目前正在处理执行查询的函数,并决定允许一个可选的函数参数,它是一个SQL参数数组。

在传递给它们的可选SQL参数的函数中,我想检查传递的SQL查询以查看是否有命名参数。如果SQL查询中有命名参数,请确保确实传递了可选的SQL参数。如果SQL查询中没有命名参数,请确保没有传递任何SQL参数。例如:

  • SQL查询= SELECT * FROM MyTable WHERE ID = @TheID→函数调用必须具有SQL参数。
  • SQL查询= SELECT GETDATE()→函数调用必须没有SQL参数。

我的问题是 “搜索”字符串的最佳方式是查询命名参数的SQL查询(不知道名称参数)。我警惕只是在字符串中搜索'@'字符,因为我在某处读到了可能有一个以该字符命名的列(例如[name@domain])。也许我可以使用正则表达式搜索'='后跟任意数量的空格后跟'@'?

2 个答案:

答案 0 :(得分:0)

没有理由不能使用@字符。名称中不应该有@,因为它是变量而不是列。您不能拥有名为@(var@iable)

的变量

结帐sp_executesql。这是一个很好的例子,可以做一些非常类似于你想要做的事情

答案 1 :(得分:0)

对于.net,

  function checkQuery (byVal myQuery As String)

    return not instr(myQuery,"@") == 0
end function

如果您的查询包含“@”

,则返回true