我可以在SQL存储过程中传递列名作为输入参数

前端之家收集整理的这篇文章主要介绍了我可以在SQL存储过程中传递列名作为输入参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
create procedure sp_First
@columnname varchar
AS
begin
select @columnname from Table_1
end 
exec sp_First 'sname'

我的要求是将列名作为输入参数传递。
我尝试过,但是输出错误

所以帮我

解决方法

你可以用几种方法来做到这一点。

一个是自己建立查询并执行它。

SET @sql = 'SELECT ' + @columnName + ' FROM yourTable'
sp_executesql @sql

如果您选择该方法,请非常确定您的输入。即使您知道您的应用程序只会提供“真实”列名称,如果某些人在您的安全中发现破解并能直接执行SP,该怎么办?然后他们可以执行任何他们喜欢的任何东西。使用动态sql,总是验证参数。

或者,您可以写一个CASE语句…

SELECT
  CASE @columnName
    WHEN 'Col1' THEN Col1
    WHEN 'Col2' THEN Col2
                ELSE NULL
  END as selectedColumn
FROM
  yourTable

这是一个更长的时间,但更多的安全。

猜你在找的MsSQL相关文章