我有一个存储过程,想知道是否可以基于参数构建动态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
是否可以做这样的事情?
答案 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中显示了一个非常好的代码示例。