【问题标题】:I can't insert into table in SQL Server我无法插入到 SQL Server 中的表中
【发布时间】:2013-01-11 08:49:44
【问题描述】:

我创建了一个存储过程,它有两个语句insertupdate

它有两个参数:

@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 所期望的。在您的情况下,您正在导致从 varcharnvarchar 的隐式转换,这(a)花费时间和精力,并且(b)如果您曾经使用非 ANSI 字符,可能会导致很难找到错误。 .

标签: sql-server stored-procedures sql-update sql-insert


【解决方案1】:

由于您正在创建 动态 sql,因此值应该用单引号括起来。要转义单引号,必须加倍,例如。

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

content相同

set @sqlupdate = 'update TableTest set ' + @f + ' = '''+ @Content + ''''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多