有2个数据表A,B我有一个winform程序,同时运行在多台PC机上,这个程序的功能是:定时在A表中取一百条数据,每一条数据进行相应的处理后插入到B表中,并在A表中删除该记录。出现了问题:B表中出现很多重复的记录。winform程序是用c#.net写的。用的是dataset存储那100条记录进行操作,离线并发该怎么做。谢谢各位了。
解决方案 »
- 请教高手一个多表连接删除问题
- 求一SQL更新语句,各位帮忙~~~~~~~~~~~
- 讨论下考勤系统的设计,谢谢。。。
- 如何实现sql server数据库与oracle数据库之间双向数据同步?
- 50分请教这个合计的SQL语句怎么写啊????
- 数据库怎么用?
- 求一工具或程序
- 我想把当前服务器上的时间(包括日期和时间)做为一个值插入到一张表中的一个date类型的字段中,我的数据库是oracle的,不知道这样的sql语句
- 在sql server里的存储过程、视图、触发器都分别是怎样提高系统效率的?有没有个人给一个理论上的具体论述?我觉得这个问题很普遍也~
- SQL 7 复制问题。pull 方式为什么老是通不过!谁能讲解一下发布路径的设置!
- 怎样判断表字段插入的值符合定义的数据类型要求
- 排序问题?
假设你的winform程序都有一个独立的ID,就用这个ID去标记这条被处理的记录。
其他的winform程序就不会重复读取已经被标记过的记录。
2、或者用一下方法读取数据,
SELECT * FROM test_user WITH (READPAST,ROWLOCK)
READPAST 忽略锁,不读取被锁定的行
ROWLOCK 对行进行加锁,下次别的机器就不会读取了,呵呵
SELECT top 100 * FROM test_user WITH (READPAST,ROWLOCK)
.......
delete .....
commit tran
中国风
-------------------那一百条怎么加锁阿。小弟是个初学者啊。。谢谢了
begin tran
SET ROWCOUNT 100SELECT * FROM tb WITH(UPDLOCK, READPAST)---事务2
BEGIN TRANSET ROWCOUNT 100SELECT * FROM tb WITH(UPDLOCK, READPAST)
2、或者用一下方法读取数据, 呵呵,和上面的锁顺序换一下
SELECT * FROM test_user WITH (ROWLOCK,READPAST)
--ROWLOCK 对行进行加锁,下次别的机器 用 READPAST 方式就不会读取了,呵呵
--READPAST 忽略锁,忽略(不读取)被锁定的行
SET NOCOUNT ON
-- 取数据可以这样定
DECLARE
@主键 int -- 根据你的主键定义(也可以是唯一键)SET ROWCOUNT 1 -- 只取一条
UPDATE A SET
@主键 = 主键,
标记 = N'已取'
FROM 你的表
WHERE 标记 = N'未取'SELECT * FROM 你的表
WHERE @主键 = 主键
默认情况下, SELECT 只下共享锁, 不会防止别人访问, 而且 SELECT 锁一般在 SELECT 完成后即释放
故一般不建议事务+SELECT+锁所以标记的方法会比较省事, 锁的范围和时间都很小(像我上面取数据的示例根本就没有显式加事务和锁)
标记 = N'已取'
OUTPUT
inserted.*
FROM 你的表
WHERE 标记 = N'未取'