如何通过存储过程中的参数指定列名?

时间:2012-07-11 09:19:49

标签: sql-server-2008 stored-procedures

USE Database
GO
CREATE PROCEDURE FillTable
    @Id nvarchar(50), 
    @ColumnNameArray nvarchar(4000),
    @ColumnValueArray nvarchar(4000)
AS 
   INSERT INTO Table(@ColumnNameArray)
   VALUES (@ColumnValueArray)    
GO

这是我在存储过程中需要的功能。但我得到错误

Invalid column name '@zoneNameArray'.

那么工作到底是什么?

我该如何做到这一点?

编辑1: 如SO用户所说,我尝试使用它。

select @sql_Str='
      INSERT INTO Table('+@ColumnNameArray+')
       VALUES ('+@ColumnValueArray+')'

但我仍有错误。 ColumnNameArray进展顺利。但是,它来ColumnValueArray我仍然无法做到正确。 ColumnValueArraystringsint组成。 例如:ColumnValueArray = "12,'abc','dddd',45,'2333'"这是我从前端(C#)传递给存储过程参数的内容。

2 个答案:

答案 0 :(得分:3)

请试试这个

   declare @sql_Str varchar(8000)
    select @sql_Str='
      INSERT INTO Table('+@ColumnNameArray+')
       VALUES ('+@ColumnValueArray+')'
    exec(  @sql_Str);  

假设@ColumnNameArray是以逗号分隔的列列表

答案 1 :(得分:1)

exec('INSERT INTO Table(' + @ColumnNameArray + ') VALUES (' + @ColumnValueArra + ')')

修改

围绕它包装存储过程

CREATE PROCEDURE FillTable
    @Id nvarchar(50), 
    @ColumnNameArray nvarchar(4000),
    @ColumnValueArray nvarchar(4000)
AS 
    exec('INSERT INTO Table(' + @ColumnNameArray + ') VALUES (' + @ColumnValueArra + ')')
GO