将列命名为传递给存储过程的参数
Naming a column as a parameter passed in to a stored procedure
我有一个存储过程,它接受参数@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'
如有任何帮助,我们将不胜感激。提前致谢
您需要将其设为如下所示的动态查询
EXEC ('SELECT a, b, c AS ['+ @colname +
'] FROM t1 WHERE b = ' + @n)
希望大家能自己想办法
这是使用 Rahul 发布的优秀示例的另一种方法。这将容纳 space 并防止 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
我有一个存储过程,它接受参数@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'
如有任何帮助,我们将不胜感激。提前致谢
您需要将其设为如下所示的动态查询
EXEC ('SELECT a, b, c AS ['+ @colname +
'] FROM t1 WHERE b = ' + @n)
希望大家能自己想办法
这是使用 Rahul 发布的优秀示例的另一种方法。这将容纳 space 并防止 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