1
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'.

それで、回避策は何ですか?

どうすればこれを機能させることができますか?

EDIT 1: SOユーザーが言ったように、このように使用してみました。

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

しかし、私はまだエラーがあります。ColumnNameArrayうまくいきます。しかし、ColumnValueArray私はまだそれを正しく理解できません。 ColumnValueArrayと の両方stringsで構成されintます。例:ColumnValueArray = "12,'abc','dddd',45,'2333'"これは、フロント エンド (C#) からストアド プロシージャのパラメーターに渡すものです。

4

2 に答える 2

3

これを試してください

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

@ColumnNameArray がカンマ区切りの列のリストであると仮定します

于 2012-07-11T09:23:55.190 に答える
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
于 2012-07-11T09:22:10.330 に答える