小编典典

SQL变量作为Where子句中的列名

sql

这个问题已经在这里有了答案

我可以在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变量视为列名?


阅读 217

收藏
2021-04-07

共1个答案

小编典典

如果这是公司内部的应用程序,那么为什么每个人都反复重申并击败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
2021-04-07