SyD*_*SyD 4 sql t-sql sql-server
我需要一些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.
Run Code Online (Sandbox Code Playgroud)
存储过程确实执行,但它不返回任何值,我知道它将@strDept视为文字nvarchar而不是列名.
所以我想我的问题是,如何让SQL Server 2005将@sqlDept变量视为列名?
你无法找到如何做到这一点的指导的原因是,这是一个非常糟糕的主意.
迟早,有人会传递一个"列名" 1 ;drop database badidea.这将是所有有关方面的祝福.
阅读SQL注入,重新考虑您的设计.
如果这是一个内部公司应用程序,为什么每个人都重新迭代并击败SQL注入死...简单地使用动态SQL非常简单.如果您觉得这些只是内部用户使用它,那么它非常简单.这是概念.您基本上编写了一个SQL语句,该语句编写的字符串实际上是一个SQL语句,然后执行它.
CREATE Procedure myDynamicProcedure
@strDept nvarchar(10),
@strUser nvarchar(30)
as
BEGIN
Run Code Online (Sandbox Code Playgroud)
1.声明一个变量来存储SQL语句.
DECLARE @SQL varchar(max)
Run Code Online (Sandbox Code Playgroud)
2.将您的@SQL变量设置为SELECT语句.基本上你正在构建它,所以它返回你想要写的东西.像这样:
SET @SQL = 'select x, y, z from table1 where' + @strDept +
' in ' + @strUser
Run Code Online (Sandbox Code Playgroud)
3.执行@SQL语句,它就像你运行的那样: 从table1中选择x,y,z,其中f18 ='Ted Lee'
EXEC (@SQL)
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53341 次 |
| 最近记录: |