如何将Columns的字符串数组作为参数传递给SQL Server存储过程

时间:2014-02-14 12:22:25

标签: c# sql sql-server

我有一个逗号分隔的字符串,其中包含列名,即

"Column1, Column2, Column3"将作为参数传递给以下存储过程。

我的存储过程如下:

@ColNames VARCHAR(1000)

Select ROW_NUMBER() OVER (ORDER BY Column1, Column2, Column3) AS RowNum, 
Column1, Column2, Column3
INTO #Results
From Table A 

我想用参数@colNames替换上面的硬编码列名。这将包括将逗号分隔的参数拆分为各个列名称。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用动态SQL并使用sp_executesql执行它。
例如:

DECLARE @ColNames VARCHAR(1000)
DECLARE @sSQL NVARCHAR(MAX)

SET @ColNames ='Column1, Column2,...'

SET @sSQL = 'SELECT ' + @ColNames + ' FROM myTable....'

exec sp_executesql @sSQL



我也快速SQLFiddle

答案 1 :(得分:2)

你可以试试这个:

CREATE PROCEDURE yourId (@columns VARCHAR(1000))
AS
BEGIN
DECLARE @s_query VARCHAR(MAX)

SET @s_query = 'Select ROW_NUMBER() OVER (ORDER BY ' + @columns + ') AS RowNum, ' + @columns + ' From A'

EXEC(@s_query)
END

这是针对t sql语法

如果您需要有关如何拆分字符串的信息,可以查看此主题:Split function equivalent in T-SQL?