我有一个存储过程,它接受参数@n和@colname并使用@n来计算一些信息。现在@colname什么都不做,因为T-SQL不允许你从参数中创建列名。有些人说你可以通过动态存储过程来做到这一点,但据我所知,他们没有做我想做的事。
这背后的原因是因为我想创建另一个存储过程,该过程多次使用其他存储过程并传递不同的@n和@colname值。
因此,为了再次澄清,我希望能够编写一个动态存储过程来执行此操作:
SELECT a, b, c AS @colname
FROM t1
WHERE b = @n
然后,一旦我能做到这一点,我将编写我的其他存储过程:
EXEC stored_procedure1 @n = 3, @colname = 'Column 1'
EXEC stored_procedure1 @n = 6, @colname = 'Column 2'
对此的任何帮助将不胜感激。提前致谢
答案 0 :(得分:1)
您需要将其设为动态查询,如下所示
EXEC ('SELECT a, b, c AS ['+ @colname +
'] FROM t1 WHERE b = ' + @n)
希望你知道休息。
答案 1 :(得分:1)
这是使用Rahul发布的优秀示例执行此操作的另一种方法。这将容纳一个空间,并将阻止SQL注入。请注意where谓词已被参数化。
declare @SQL nvarchar(max)
set @SQL = 'SELECT a, b, c AS ' + quotename(@colname) +
' FROM t1 WHERE b = @n'
exec sp_executesql @SQL, N'@n int', @n = @n