我有这个存储过程,它接受一个 comlumn 名称作为输入参数。 SELECT 语句将根据输入参数选择一列
create procedure getColumn (@whichColumn varchar)
as
begin
declare @sql nvarchar(max)
set @sql = 'SELECT [' + @whichColumn + ']'
+ ' FROM myTable'
+ ' where ['+ @whichColumn + '] is not null'
+ ' and [' + @whichColumn + '] != '''' ' ;
exec sp_executesql @sql
end
当我执行这个存储过程时,
exec getColumn 'Apple';
错误显示“无效的列名 'A'”。
我不明白为什么它只获取输入的第一个字符
最佳答案
查看您的参数声明:
@whichColumn varchar
From MSDN :
When n is not specified in a data definition or variable declaration statement, the default length is 1.
所以这是一个单字母
varchar
.尝试指定一个大小:@whichColumn varchar(50)
或者更好的是,使用系统定义的类型作为对象名称:
@whichColumn sysname
关于sql-server - 存储过程中的动态sql,以列名作为输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332143/