【发布时间】:2013-01-11 08:49:44
【问题描述】:
我创建了一个存储过程,它有两个语句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 行
列名“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)
【问题讨论】:
-
旁注:由
EXEC执行的字符串应该始终是NVARCHAR类型——因为这是EXEC所期望的。在您的情况下,您正在导致从varchar到nvarchar的隐式转换,这(a)花费时间和精力,并且(b)如果您曾经使用非 ANSI 字符,可能会导致很难找到错误。 .
标签: sql-server stored-procedures sql-update sql-insert