1

insert2つのステートメントと。を持つストアドプロシージャを作成しましたupdate

2つのパラメータを取得します。

@content as nvarchar(10),
@fieldName as int

インラインではUpdateすべてが正しく機能しますが、テーブルには挿入されません。構文とすべてが正しいですが、実行すると

Execute sp_update 432,4

SQLServerは次のエラーを表示します。

メッセージ207、レベル16、状態1、行1
無効な列名'up'。
メッセージ207、レベル16、状態1、行1
無効な列名'Field3'。

これは私のスクリプトです:

ALTER procedure [dbo].[sp_update]
    @content as nvarchar(10),
    @fieldName as int
as
   declare @ff as varchar
   set @ff = Convert(varchar,@fieldName)

   declare @f as char(7) 
   set @f = 'Field'+ @ff

   declare @sqlupdate varchar(500)
   declare @sqlinserttoChangelog varchar(500)

   set @sqlinserttoChangelog = 'Insert Into dbo.changelog (changeType, fieldname) Values ('+'up'+','+@f+')'
   Exec (@sqlinserttoChangelog)

   set @sqlupdate = 'update TableTest set ' + @f + ' = '+@Content
   Exec (@sqlupdate)
4

1 に答える 1

5

動的SQLを作成しているため、値は一重引用符で囲む必要があります。一重引用符をエスケープするには、たとえば2倍にする必要があります。

set @sqlinserttoChangelog = 'Insert Into dbo.changelog (changeType, fieldname) Values ('''+'up'+''', '+@f+')'

と同じcontent

set @sqlupdate = 'update TableTest set ' + @f + ' = '''+ @Content + ''''
于 2013-01-28T03:02:57.153 に答える