use*_*809 36 sql stored-procedures
create procedure sp_First
@columnname varchar
AS
begin
select @columnname from Table_1
end
exec sp_First 'sname'
Run Code Online (Sandbox Code Playgroud)
我的要求是将列名称作为输入参数传递.我试过这样,但它给出了错误的输出.
所以帮助我
Mat*_*lie 60
您可以通过几种方式完成此操作.
一,是自己构建查询并执行它.
SET @sql = 'SELECT ' + @columnName + ' FROM yourTable'
sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
如果您选择使用该方法,请务必确定您的输入.即使您知道您的应用程序只会提供"真正的"列名称,如果某人发现您的安全性破解并且能够直接执行SP,该怎么办?然后他们可以执行他们喜欢的任何事情.使用动态SQL,始终始终验证参数.
或者,你可以写一个CASE声明......
SELECT
CASE @columnName
WHEN 'Col1' THEN Col1
WHEN 'Col2' THEN Col2
ELSE NULL
END as selectedColumn
FROM
yourTable
Run Code Online (Sandbox Code Playgroud)
这有点长啰嗦,但更加安全.
Dar*_*opp 12
不,那只会选择参数值.您需要使用动态SQL.
在您的程序中,您将拥有以下内容:
DECLARE @sql nvarchar(max) = 'SELECT ' + @columnname + ' FROM Table_1';
exec sp_executesql @sql, N''
Run Code Online (Sandbox Code Playgroud)
尝试使用动态SQL:
create procedure sp_First @columnname varchar
AS
begin
declare @sql nvarchar(4000);
set @sql='select ['+@columnname+'] from Table_1';
exec sp_executesql @sql
end
go
exec sp_First 'sname'
go
Run Code Online (Sandbox Code Playgroud)