社区
应用实例
帖子详情
能不能只更新改变的字段
robertzy
2004-12-03 04:20:40
在前台如果改变了某些字段得值(不是全部),在后台的存储过程怎么只更新那些改变的值,而不是全部。例如,表有10个字段,用户在前台只更新了其中几个,怎么样作检查并相应的更新。我不想象这样做:
Update table1 set col1=@col1, col2=@col2,......col10=@col10.
但我不只怎么做
...全文
507
21
打赏
收藏
能不能只更新改变的字段
在前台如果改变了某些字段得值(不是全部),在后台的存储过程怎么只更新那些改变的值,而不是全部。例如,表有10个字段,用户在前台只更新了其中几个,怎么样作检查并相应的更新。我不想象这样做: Update table1 set col1=@col1, col2=@col2,......col10=@col10. 但我不只怎么做
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
Mybatis-Plus实现只
更新
部分
字段
的数据
Mybatis-Plus实现只
更新
部分
字段
的数据
mybatis
更新
数据时只
更新
部分
字段
的问题
在mybatis
更新
数据时,传入的是一个对象,但是有时候只是
更新
这个对象中的某些
字段
,并不是全部
字段
,如果使用如下方式
更新
,则有些
字段
则会被
更新
为null。 <update id="updateEmp" parameterType=...
java只修
改变
的
字段
_java – JPA merge()仅
更新
某些
字段
.其他变更...
这是我的第一篇文章....我的实体类是自动的由Netbeans 7.2.1生成我面临的问题是:在
更新
过程中,我
改变
了四个使用find()检索对象的
字段
,然后我使用merge()
更新
数据库中的对象.三个表中识别并
更新
了四个更改,但其中...
分享 2 个 .NET EF 6 只
更新
某些
字段
的方法
EF
更新
数据时,通常情况下,是
更新
全部
字段
的,但这样做性能很低,也不安全,本文抛砖引玉,分享 2 个 .NET EF 6 只
更新
某些
字段
的更好的方法。
MySQL
字段
添加注释,但不
改变
字段
的类型
MySQL
字段
添加注释,但不
改变
字段
的类型 之前在导数据库数据的时候,忘记将
字段
的注释导过来了。现在需要将所有
字段
都加上注释(崩溃)。由于导数据的过程比较长,业务那边从原始数据库导出了一个 Excel,里面有所有...
应用实例
27,582
社区成员
68,544
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章