这个问题已经在这里有了答案 :
我可以在SQL存储过程中将列名作为输入参数传递吗 (9个答案)
2年前关闭。
我需要有关SQL逻辑的帮助,并且我已经(在研究中)进行了2天的工作,但获得了零成功。
我的目标是尝试将变量从ASP页传递到存储过程,该过程将变量用作where子句中列名称的条件。
因此,例如(我的查询的简化版本):
@strDept nvarchar(10), @strUser nvarchar(30) -- The asp page will pass f18 to @strDept & Ted Lee to strUser -- f18 is the column name in my database that I need in the where. select x, y, z from table1 where @strDept in (@strUser) -- and this is the select statement, notice the where clause.
存储过程确实执行,但是它不返回任何值,而且我知道它会将@strDept视为文字nvarchar而不是列名。
所以我想我的问题是,如何使SQL Server 2005将@sqlDept变量视为列名?
如果这是公司内部的应用程序,那么为什么每个人都反复重申并击败SQL注入技术……使用动态SQL非常简单。如果您对这些只是内部用户感到满意,那么它非常简单。这是概念。本质上,您编写了一个SQL语句,该语句编写的字符串实际上是一个SQL语句,然后执行它。
CREATE Procedure myDynamicProcedure @strDept nvarchar(10), @strUser nvarchar(30) as BEGIN
1.声明一个变量以存储SQL语句。
DECLARE @SQL varchar(max)
2.将您的@SQL变量设置为SELECT语句。 基本上,您正在构建它,以便它返回您要编写的内容。像这样:
SET @SQL = 'select x, y, z from table1 where' + @strDept + ' in ' + @strUser
3.执行@SQL语句,它就像您运行的一样: 从table1中选择x,y,z,其中f18 =’Ted Lee’
EXEC (@SQL) END