用存储过程的方式实现修改表列的记录中遇到的“语法错误”问题

//创建语句
create proc change17
@column varchar(10),@value varchar(10),@condition varchar(100)
as
declare @sql nvarchar(400)
set @sql='update babies2 set '''+@column+''' = '''+@value+''' where '+@condition
exec(@sql)

//执行语句
exec change17 Birthplace , '22030301' , ' Attacher=吕布 '

//结果显示
消息 102,级别 15,状态 1,第 1 行
'Birthplace' 附近有语法错误。

第1个回答  2013-07-11
看了前人的回复,你的执行存储过程最后运行的sql语句为
update babies2 set Birthplace = '22030301' where Attacher=吕布

你这样看你的sql语句 你应该就知道出错哪里了,你的Attacher=吕布 其中的Attacher应该是字符串格式的 你给赋值的 吕布 并非是字符串。你执行此语句肯定是出错的
第2个回答  2013-07-11
@column两边的单引号拼接多了,各要一个即可,列名不要用单引号包含追问

//修改后

set @sql='update babies2 set '+@column+' = '''+@value+''' where '+@condition

//结果
消息 207,级别 16,状态 1,第 1 行
列名 '吕布' 无效。

追答

吕布为字符常量,需要额外拼接单引号
exec change17 Birthplace , '22030301' , ' Attacher='''吕布''''

本回答被提问者采纳
第3个回答  2013-07-11
set @sql='update babies2 set '+@column+' = '''+@value+''' where '+@condition

exec change17 Birthplace , '22030301' , ' Attacher='''吕布''''

用存储过程的方式实现修改指定表的指定列的记录遇到的“列名无效”问题...
set @sql=' update babies set name = '''+@fname+''' where id= '+@id

求救啊。下面存储过程怎么改,with temp as ()这里有错误
set @sql2='with temp as (select row_number() over (order by id) as inde, * from T_Books where '+@Field+' like ''% '+@Key+' %'' ) select * from temp where inde between (@pageIndex - 1)* @pageSize+1 and @pageIndex * '将sql2 修改成这样 ...

SQL语法错误:无法将 NULL值插入列'',该列不允许空值。INSERT失败。怎么...
1、点击数据库表右键的【设计】;2、把影响到的列改成允许为空;3、点击【保存】。原因:SQL存储过程语法可能是正确的,因为语法并没有对表结构内部字段是否非空进行验证,只有执行了才知道。可以选择编辑前200行,看一下是不是新增了列,但是列里面的值是null,然后又在设置的列里面不允许有null,...

如何用SQL创建一个存储过程来修改表中指定列的数据?
set @sql = 'update student set '+@column+' = '''+@data+''' where id = 1'execute @sql go

SQL语法错误:无法将NULL值插入列'',该列不允许空值。INSERT失败。怎么解 ...
1. 打开数据库表的设计视图,通常通过在表上点击鼠标右键并选择“设计”来实现。2. 在设计视图中,找到导致问题的列,并将该列的“允许空”属性改为“是”,以便允许该列接受NULL值。3. 完成设置后,点击“保存”按钮,以应用更改并解决INSERT操作中的错误。问题的原因在于,SQL语句的存储过程部分可能...

ORACLE存储过程中游标作为输出参数调用时怎么报错
1.通过存储过程的出参,将“当前用户:user_id”连接串返回;比如:假设你的过程叫,prc_test,在参数列表中增加出参。create or replace procedure prc_test(入参 in 类型, 出参 out 类型) is begin -- 逻辑实现 end;出参就是你要把内容放进去,用来传值的变量。2.在过程中保存一张临时表,...

...引发的死锁问题解决方法及oracle分区和存储过程的思考
起初,由于表已按时间分区,尝试直接执行SQL语句时遇到了ORA-14402错误,原因是更新分区关键字列会导致分区的更改。解决这个问题的方法是先启用表的行移动功能(alter table xxx enable row movement),允许对分区字段进行更新。更新后别忘了关闭行移动(alter table xxx disable row movement)。然而,即使...

如何用oracle存储过程实现某表中下一条数据的结束时间列日减去1,修改...
我好像有碰到过类似的问题,你用我的语句查查试试,是不是这种效果.如果不是,再讨论 select begda,to_date(MIN(begda) over(PARTITION BY t.num ORDER BY t.num rows BETWEEN 1 following AND 2 following),'yyyy-mm-dd')-1 from (select 1 num,begda,endda from test )t ...

求系统分析与设计方法的指导书籍
使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便全面掌握图书的流通情况。 本次作业设计题目:“图书管理系统”主要目的是利用数据库软件编制一个管理软件,用以实现图书、读者以及日常工作等多项管理。同时对整个系统的分析、设计过程给出一个完整...

存储过程后跟dateadd函数为什么会报错
如果SQL Server程序员想将表达式从一种换为另一种,他可以从SQL Server 7和2000中自带的两种功能中做出选择。在存储过程或其他情况下,我们常常需要将数据从datetime型转化成varchar型;CONVERT和CAST就可以用于这种情况。由于SQL Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很...

相似回答
大家正在搜