WHERE子句中的动态条件

时间:2011-08-04 16:57:10

标签: tsql dynamic conditional-statements where

我有一个存储过程,想知道是否可以基于参数构建动态where条件。

假设我有这个问题:

SELECT *
FROM tbl_Users

现在,我有一个名为@username的参数,我想用它来构建一个动态where条件(通过我的程序可能是一个或多个条件)。为了实现这样的目的,我使用以下语句:

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

是否可以做这样的事情?

4 个答案:

答案 0 :(得分:5)

你将不得不为此打入动态的SQL。

会运行这样的事情:

declare @sql varchar(max)

set @sql = '
    SELECT *
    FROM tbl_Users
    WHERE ' + @username

exec (@sql)

答案 1 :(得分:2)

我不确定我理解你,但如果我的理解是正确的,你可以做以下事情(注意:注射易受伤害)

DECLARE @SQL varchar(500) = 'SELECT * FROM tbl_users ' + @username

EXEC @SQL

答案 2 :(得分:1)

据我所知,这不会起作用。您将需要生成要执行的脚本并使用exec命令。

答案 3 :(得分:0)

你真的应该将SQL关键字和参数连接成一个单独的字符串,如上面的一些响应中所示,原因是打开 SQL注入的大门(其中一个贡献者实际上称之为。这是明智的警告!)。

相反,您应该参数化您的SQL并执行系统SP sp_executesql

这个StackOverflow posting中显示了一个非常好的代码示例。