【问题标题】:Can I pass variable to select statement as column name with where condition value from variable我可以将变量传递给 select 语句作为列名,其中条件值来自变量
【发布时间】:2014-09-08 01:04:15
【问题描述】:

我有以下简单的选择语句:

DECLARE @value varchar(10) 
SET @value = 'intStep' 

SELECT @value FROM dbo.tblBatchDetail

我试过了

 SELECT CAST(@value AS varchar(10)) FROM dbo.tblBatchDetail

我得到了一个 intstep 列表

问题:我可以将变量作为列名传递给该语句吗?或者在变量值来自变量的条件下执行此操作的最佳方法是什么

我使用的是 SQL Server 2008 (9.0 RTM)

这将是一个存储过程

提前致谢

【问题讨论】:

  • 检查动态查询
  • 我确实使用过它并且它很好,但我想设置这样的条件 Gnumber = '+@g
  • 它给了我错误我想显示列中的值的无效列名
  • 你不能对列名或表名使用参数 - 如果你想“参数化”这个,你必须使用动态 SQL(有它的所有缺点和问题)
  • 我想我没有让自己清楚地看到我做了什么我使用了动态 SQL,它工作得很好,但它显示了我通过变量给它的所有列,就像我的代码

标签: sql sql-server-2008


【解决方案1】:

您可以使用动态 sql 来执行此操作,但这是 BAD 做法。

这是您问题的答案,但我肯定不会这样做,因为它会让您面临 sql 注入攻击。

create procedure GetColumn
     @columnName varchar(50), 
     @g varchar(200)
as
   declare @str varchar(2000)
   set @str = 'select [' + @columnName + '] from dbo.tblBatchDetail where Gnumber = ' + @g

   exec ( @str ) 

GO

【讨论】:

  • 我确实使用了动态查询,它工作得很好,但我想添加条件 where from also variable like this Gnumber = '+@g
  • 你能不能不使用QUOTENAME作为标识符,使用sp_prepare等作为标量值以使其更安全?
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2013-02-20
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多