社区
MS-SQL Server
帖子详情
如何在select 获得记录集的同时update 该记录集
sidshen
2003-11-14 09:55:26
定时select获得一个记录集(几秒钟一次),但处理该结果集的时间比较长,常常还没处理完下次select又开始了,这样就会出现同一条记录多次被操作的情况,请问如何在select 的同时更新该记录集加上处理中的标记?
...全文
296
7
打赏
收藏
如何在select 获得记录集的同时update 该记录集
定时select获得一个记录集(几秒钟一次),但处理该结果集的时间比较长,常常还没处理完下次select又开始了,这样就会出现同一条记录多次被操作的情况,请问如何在select 的同时更新该记录集加上处理中的标记?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sidshen
2003-11-14
打赏
举报
回复
用事务锁也不好控制,因为有时记录多,有时记录少,delay时间不好掌握
之所以会出现两次select到相同记录集是因为vs.net 2003变成多线程进行,以前2002时单线程就没这问题,现在初步决定采用多线程处理方式,并行20~100个线程,每线程只处理一条记录
Clove
2003-11-14
打赏
举报
回复
使用存储过程
根据页面提交的时间差和提交条件提交到服务器端
然后锁定
进行操作,解除锁定
这样做的前提就是你的数据量非常的大
不过也可以使用索引解决
或者单纯的使用 sql语句
update 'table' set '' where (select * from '' where ...)
不过既然数据比较大而且比较频繁建议使用索引
pengdali
2003-11-14
打赏
举报
回复
1 如何锁一个表的某一行
A 连接中执行
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from tablename with (rowlock) where id=3
waitfor delay '00:00:05'
commit tran
B连接中如果执行
update tablename set colname='10' where id=3 --则要等待5秒
update tablename set colname='10' where id<>3 --可立即执行
2 锁定数据库的一个表
SELECT * FROM table WITH (HOLDLOCK)
注意: 锁定数据库的一个表的区别
SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除
SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
sidshen
2003-11-14
打赏
举报
回复
先update再select效率太低
lynx1111
2003-11-14
打赏
举报
回复
用事务加锁吧
teaism
2003-11-14
打赏
举报
回复
用事务加锁吧.
victorycyz
2003-11-14
打赏
举报
回复
可以这样,先update标记出符合条件的记录,再select * from table_name where flag_field=1
MFC之ADO数据库快速编程Demo
“查”操作是最常见的,可以创建一个
记录集
,用适当的
SELECT
语句打开它,比如"
SELECT
* FROM 表名 WHERE 条件"。MFC的`CDaoRecordset`类提供了遍历记录的方法,如`MoveFirst`、`MoveNext`等,你可以通过这些方法获取...
直接通过ADO操作Access数据库(修改版)
以下是如何打开一个
记录集
的示例: ```vbscript Dim rs Set rs = New ADODB.Recordset rs.Open "
SELECT
* FROM Employees", conn ``` 这会从名为"Employees"的表中选择所有记录。 3. **操作记录**: `...
SQL学习资料(包含所有常用的语句例子)
`MINUS` 返回第一个 `
SELECT
` 语句的结果集减去第二个 `
SELECT
` 语句的结果集。 - **示例**:查找所有销售额大于1000并且小于2000的记录。 ```sql
SELECT
* FROM Store_Information WHERE Sales > 1000 ...
kingbase 使用
SELECT
INTO 的 FOR
UPDATE
方法
Oracle 和 KingbaseES 均支持 ...FOR
UPDATE
* 子句的作用是锁住特定 *
SELECT
检索结果记录,用来避免这些记录在当前事务结束前被其它。的事务将被阻塞,直到当前事务结束。insert into student values (2,'哈哈');
select
... for
update
,
select
... for
update
nowait
for
update
nowait 的区别 首先一点,如果只是
select
的话,Oracle是不会加任何锁的,也就是Oracle对
select
读到的数据不会有任何限制,虽然这时候有可能另外一个进程正在修改表中的数据,并且修改的结果可能影响...
MS-SQL Server
34,875
社区成员
254,640
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章