【发布时间】:2015-12-30 15:47:58
【问题描述】:
我正在使用带有多个参数的存储过程。但是,事实证明,对于其中一个参数,我需要遍历一个项目列表并多次调用 SP。但是当我向 SP 传递该类型的所有可能值时,通过通配符说“全部获取”来绕过参数似乎更有效(也更简单)。
是否可以这样做,例如使用“*”或“%”之类的?
理论上(基于我所做的研究),“%”应该可以工作,但在我的情况下,它不会返回任何记录。我做错了什么,这段代码:
. . .
new SqlParameter()
{
ParameterName = "@Member",
SqlDbType = SqlDbType.VarChar,
Value = '%'
},
. . .
?
【问题讨论】:
-
只需通过参数传递 NULL 并使用
WHERE col = ISNULL(@param, col)或获得更高性能WHERE col = @param or @param IS NULL -
这看起来像是我需要添加到 SP 中的东西,但我不能 - 那不是我的域(没有双关语)。
-
为什么实际上使用一个参数,为什么不直接改变存储的过程来使用通配符呢? - 啊我看到你的其他评论,你被阻止这样做......
-
嗯,
%是一个通配符当它与LIKEoperator一起使用。但如果这没有发生,它就不会起作用。 -
是的,我只是要评论一下,存储过程必须使用类似于
...LIKE @Member....的内容,请参阅此处的答案以获取示例:stackoverflow.com/questions/10601318/…
标签: sql-server stored-procedures wildcard sqlparameter sqldbtype