Я не могу вставить в таблицу в SQL Server

Я создал хранимую процедуру с двумя операторами insert и update.

Он получает два параметра:

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

В строке Update все работает правильно, но в таблицу не вставляется. Синтаксис и все верно, но когда я выполняю

Execute sp_update 432,4

SQL Server показывает эту ошибку:

Сообщение 207, уровень 16, состояние 1, строка 1
Недопустимое имя столбца "вверх".
Сообщение 207, уровень 16, состояние 1, строка 1
Недопустимое имя столбца "Поле3".

Это мой сценарий:

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)

person Milad Sobhkhiz    schedule 28.01.2013    source источник
comment
Примечание: строка, которую должен выполнить EXEC, всегда должна быть типа NVARCHAR, поскольку именно этого ожидает EXEC. В вашем случае вы вызываете неявное преобразование из varchar в nvarchar, которое (а) требует времени и усилий и (б) может привести к очень трудным для поиска ошибкам, если вы когда-либо используете символы, отличные от ANSI...   -  person marc_s    schedule 28.01.2013


Ответы (1)


Поскольку вы создаете динамический sql, значения следует заключать в одинарные кавычки. Чтобы избежать одинарной кавычки, ее необходимо удвоить, например.

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

то же самое с content

set @sqlupdate = 'update TableTest set ' + @f + ' = '''+ @Content + ''''
person John Woo    schedule 28.01.2013