【发布时间】:2011-10-20 04:50:59
【问题描述】:
我有一个存储过程,想知道是否可以基于参数建立动态where 条件。
假设我有这个查询:
SELECT *
FROM tbl_Users
现在,我有一个名为@username 的参数,我想用它来建立一个动态的where 条件(通过我的程序可能是1 个或多个条件)。为了达到类似的效果,我使用以下语句:
SELECT *
FROM tbl_Users
@username -- where this parameter might hold a condition string such as "Where usr_Username = 5 and usr_first_name like '%Frank%' etc
有可能做这样的事情吗?
【问题讨论】:
-
不在 T-SQL 本身;您可以使用前端语言(C#、VB.NET 或其他语言)构建该 SELECT 语句,并在完成后将其发送到 SQL Server,或者您可以在 T-SQL 语句中使用动态 SQL 将查询构建为字符串,然后“执行”那个字符串——但你不能像这样“参数化”你的 T-SQL 查询的一部分....
-
您可以通过字符串构建来做到这一点(就像下面的几个人所展示的那样),但请注意——如果你有任何选择,请避免使用动态 sql——这在很大程度上是一个编写、维护、升级、故障排除等令人头疼。
标签: tsql dynamic conditional-statements where