社区
应用实例
帖子详情
能不能只更新改变的字段
robertzy
2004-12-03 04:20:40
在前台如果改变了某些字段得值(不是全部),在后台的存储过程怎么只更新那些改变的值,而不是全部。例如,表有10个字段,用户在前台只更新了其中几个,怎么样作检查并相应的更新。我不想象这样做:
Update table1 set col1=@col1, col2=@col2,......col10=@col10.
但我不只怎么做
...全文
361
21
打赏
收藏
能不能只更新改变的字段
在前台如果改变了某些字段得值(不是全部),在后台的存储过程怎么只更新那些改变的值,而不是全部。例如,表有10个字段,用户在前台只更新了其中几个,怎么样作检查并相应的更新。我不想象这样做: Update table1 set col1=@col1, col2=@col2,......col10=@col10. 但我不只怎么做
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
acenk
2004-12-10
打赏
举报
回复
再加一个参数表示是否更新就可以啊
631799
2004-12-10
打赏
举报
回复
--每隔一段时间查一次表,时间间隔不定,每次要查到表里面对于上次查询时不同的数据,
--也就是说在上次查询完一直到这次查询开始前,中间发生的所有的update和insert的数据都要被查出来.不用建临时表!
/*方案1,触发器+标识字段(要求你的表中有主键)
在你的表中增加一个标识字段: 字段名:标识 类型:bit,默认值:1
写如下触发器:*/
create trigger tr_process on 你的表
for update
as
if update(标识) return
update a set 标识=1
from 你的表 a,inserted b
where a.主键=b.主键
go
--查询的时候,用:
select * from 你的表 where 标识=1
update 你的表 set 标识=0 --查询完成后,将标识设置为0,表示已经查询过
--方案2,用 BINARY_CHECKSUM + 标识字段 (不要求表中有主键,但要写字段列表)
--在你的表中增加一个字段: 字段名:标识 类型:int 默认值:0
--查询时用:
select * from 表
where 标识<>BINARY_CHECKSUM(列1,列2,...列n)
--然后更新标识字段
update 表 set 标识=BINARY_CHECKSUM(列1,列2,...列n)
--方案2的简单示例
declare @t table(a int,b int,标识 int)
insert @t(a) select 1
union all select 2
update @t set 标识=BINARY_CHECKSUM(a,b)
update @t set a=100 where a=2
select a,b from @t
where 标识<>BINARY_CHECKSUM(a,b)
vinsonshen
2004-12-06
打赏
举报
回复
UP
zhang_yzy
2004-12-03
打赏
举报
回复
实在不行,你就在本地先保存一份,当提交时,判断一下不就行了
另外,有些开发工具有这种功能的,
例如DELPHI中在ADO或QUREY 中都有属性可以判断是否被修改了
nksharp
2004-12-03
打赏
举报
回复
for(int i =0 ;i ++; i < 10){ //前台的纪录数目
--
string strupdate;
for(int j =0;j++;j < 10){ //改变的列数
if ( 改变的列){
string strcolumn,strvalues;
strcolumn = 'aa';
strvalues = '1';
strupdate = strupdate + strcolumn + '=' + strvalues;
}
exec(update table set '+strupdate+')
}
就可以把 别弄得太复杂 呵呵 我也就知道这模多了
}
robertzy
2004-12-03
打赏
举报
回复
多谢nksharp,我不大想用statement,因为在存储过程中可以加其它逻辑,如transaction。用statement更新,适应性不强。再看看有没有好办法。
robertzy
2004-12-03
打赏
举报
回复
不大明白,拆分完了再怎么样呢,放到临时表又怎么样呢?
nksharp
2004-12-03
打赏
举报
回复
是丫 你就直接 在前台循环比较更新就可以了 其实根本不用存储过程 反而麻烦 效率不搞
nksharp
2004-12-03
打赏
举报
回复
sql的存贮过程不能传递数组的 你可以用逗号组成一个大字符串 传导后台再拆分 因为你是多行改变的 或者临时表也可以 尝试一下就知道了 我的e-mail:pang_kunlong@hotmail.com 可以把代码发给我看看 如果有必要的话 呵呵
robertzy
2004-12-03
打赏
举报
回复
感觉是执行SQL语句,并不是个存储过程,好像也不太好
robertzy
2004-12-03
打赏
举报
回复
你是说用exec 去执行statement? 不然岂不是要做排列组合。
nksharp
2004-12-03
打赏
举报
回复
引擎怎模做的 问问ms的人把 呵呵 太深了 。。。。。。。。。你可以这样是一下:你穿参数时候 这样传
col2=@col2,col10=@col10.. 把你改变的列名称的字段传过去 后台直接 更新就可以了
jiang130
2004-12-03
打赏
举报
回复
感覺是個概念的問題,你存儲過程的代碼可以在觸發器里做嗎?
robertzy
2004-12-03
打赏
举报
回复
对啊,我就是想知道引擎做了什么事情/怎么做的,
robertzy
2004-12-03
打赏
举报
回复
上面写得有点不清楚,应该是Update table1 set col1=@col1, col2=@col2,......col10=@col10. where id = @id …..反正先就更新一行
nksharp
2004-12-03
打赏
举报
回复
这只能具体问题具体分析了 因为ACCESS中用ole把前台的表邦定了 利用ADO的引擎能够做出判断 但你说的如果直接是传参数的话 可能没有一个公共的方法调用去实现 。。。。反正我是不知道 呵呵 帮你顶顶。。
robertzy
2004-12-03
打赏
举报
回复
其实在前台比较所花费的时间和代码不会太多,而且如果发现没有一个改变,就不用传到SQL了,这样更合理,但关键是我检查出哪几个变了,后台的存储过程怎么写
robertzy
2004-12-03
打赏
举报
回复
是这样的,好比前台有一个表格,如个人的详细信息,有20个字段,每次用户打开后要更新,但我不知道到底会改几个,也可能一个不改。当用户按了更新按钮后,自然要把改的数据保存到数据库,最简单的办法就是写一个存储过程,把前台的数据全部传到SQL去更新,但这样有个问题,如果我的表有个trigger要跟踪某个字段的变化,通常用update(column)去检查,这样一来,即使那个字段没更新,也会让update(column)为真,当然可以用deleted/inserted去比较,但这样就多了一步,如果跟踪的字段多,会影响performance.所以我不知道有没有办法解决这个问题。而且只更新改变的也比较合理,就像在Access中改一样,你改一行的一个字段,其他不悔改的。
nksharp
2004-12-03
打赏
举报
回复
其实你并不知道怎样去检查哪几个字段改变了所以 才又这样的问题 但是你要去检查那几个字段改变了 所花费的时间和代码更多 效率不如直接都更新了快,,,效率与优化始终是一对矛盾。。。:)
liuchunjp
2004-12-03
打赏
举报
回复
更新了几个改几个就行啦。不知道搂主的意思是什么。
加载更多回复(1)
JIRA三级权限方案 - 项目、单据、
字段
不同级别的权限控制
能限制某些成员能看到但是
不能
编辑单据和
字段
吗? Jira作为一款优秀的项目管理系统,功能全面,配置灵活,权限方案完善,可扩展、可定制。 本课程介绍权限控制的具体实施方案,针对项目、单据、
字段
,演示三种不同...
Mybatis-Plus实现只
更新
部分
字段
的数据
Mybatis-Plus实现只
更新
部分
字段
的数据
关于 数据
更新
时 ,只
更新
指定
字段
的问题。。
业务很简单。
更新
数据一般有以下几种方案1.数据传给前段时,传所有
字段
,然后后台直接拿前段的数据进行全
字段
更新
。2.
更新
前从DB查询一下,然后往查询的对象上根据业务选择赋值或不赋值,然后
更新
数据库。3.根据传来的数据拼SQL
更新
。项目是前后端分离的项目,如果采用方案1,每次
更新
时前端需要写大量赋值代码,比如一个vo有50个
字段
,我只
更新
了一个
字段
,前端会需要传递50个
字段
给后台controller,...
mybatis
更新
数据时只
更新
部分
字段
的问题
问题 在mybatis
更新
数据时,传入的是一个对象,但是有时候只是
更新
这个对象中的某些
字段
,并不是全部
字段
,如果使用如下方式
更新
,则有些
字段
则会被
更新
为null。 <update id="updateEmp" parameterType="com.mytest.mybatis.entity.Employee"> update tbl_employee set last_name = #{lastName}, email = #{email}, gender = #{gender}, ag
MySQL
字段
添加注释,但不
改变
字段
的类型
MySQL
字段
添加注释,但不
改变
字段
的类型 之前在导数据库数据的时候,忘记将
字段
的注释导过来了。现在需要将所有
字段
都加上注释(崩溃)。由于导数据的过程比较长,业务那边从原始数据库导出了一个 Excel,里面有所有
字段
的注释,然后让我们根据这个注释一个个加。 MySQL添加注释语句# 之前以为给MySQL
字段
添加注释很容易,但是找了下都是需要同时修改
字段
类型的,和我们的需求不符。比如 ALTER TABLE tb_name MODIFY COLUMN name col_type COMMENT '注释';
应用实例
27,579
社区成员
68,556
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章