将列命名为传入存储过程的参数

时间:2015-07-16 20:41:27

标签: sql-server tsql stored-procedures parameterized-query

我有一个存储过程,它接受参数@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'

对此的任何帮助将不胜感激。提前致谢

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