sql2008动态语句

rmini 2015-03-11 10:23:05
以下存储过程有什么问题吗,该如何修改?(意思是更新Base_Formula_Lx_test表里的内容,更改的字段和更改的内容都是动态的)

Create proc [dbo].[Formula_Lx_FieldNames]
@NeiRong varchar(40),
@bianh varchar(40),
@FieldNames varchar(40)
as
declare @s nvarchar(max)
set @s = 'update Base_Formula_Lx_test set ' + @FieldNames + '=' + @NeiRong + ' where BianH=' + @bianh + ''
Exec(@s)
...全文
241 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-03-12
  • 打赏
  • 举报
回复
不加-,说我非法字符,不让通过~~
还在加载中灬 2015-03-12
  • 打赏
  • 举报
回复
--你 可以把存储过程修改成-那-样,其-中-特-别-的-是,@NeiRong-传-参-时-像-正-常-时-那-样-就-可-以-了,不用-特-殊-处-理
还在加载中灬 2015-03-12
  • 打赏
  • 举报
回复
ALTER proc [dbo].[Formula_Lx_FieldNames]
@NeiRong varchar(40),
@bianh varchar(40),
@FieldNames varchar(40)
as
declare @s nvarchar(max)
SET @NeiRong=REPLACE(@NeiRong,'''','''''')
set @s = 'update Base_Formula_Lx_test set ' + @FieldNames + '=''' + @NeiRong + ''' where BianH=' + CAST(@bianh AS VARCHAR(10)) + ''
Exec(@s)
薛定谔的DBA 2015-03-11
  • 打赏
  • 举报
回复
如果执行:
exec [dbo].[Formula_Lx_FieldNames] 'AA','BB','CC'
@s 结果是:update Base_Formula_Lx_test set CC=AA where BianH=BB 所以改为:
set @s = 'update Base_Formula_Lx_test set ' + @FieldNames + '=''' + @NeiRong + ''' where BianH=''' + @bianh + ''''
oraclecaicai 2015-03-11
  • 打赏
  • 举报
回复
引用 5 楼 forevermini 的回复:
BianH字段是int的
你把执行时的报错信息贴出来吧~
rmini 2015-03-11
  • 打赏
  • 举报
回复
BianH字段是int的
rmini 2015-03-11
  • 打赏
  • 举报
回复
我再试试看行不行
rmini 2015-03-11
  • 打赏
  • 举报
回复
表有4个字段,其中1个字段为BianH,另外3个字段的内容都可能被更改,字段都是nvarchar的,内容都是字符串,有字母有数字有+-*/等字符,
oraclecaicai 2015-03-11
  • 打赏
  • 举报
回复
等号右边赋值的是字符串,本身两边有单引号,在SQL语句的字符串中要双写单引号取消其特殊含义: set @s = 'update Base_Formula_Lx_test set ' + @FieldNames + '=''' + @NeiRong + ''' where BianH=''' + @bianh + ''''
还在加载中灬 2015-03-11
  • 打赏
  • 举报
回复
我不知道,你的列名是否是多个,更新的内容是什么样的格式,因为如果是字符串,需要加'' 看现在的样式没有问题,是出了什么问题呢?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧