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

2024-02-22

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,始终,always,验证参数。

或者,您可以编写 CASE 语句...

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

这有点啰嗦,但更安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 SQL 存储过程中将列名作为输入参数传递吗 的相关文章

随机推荐