用触发器就行了 create table ta(id int ,name varchar(10)) insert ta select 1,'a' insert ta select 2,'b'create trigger test_tr on ta for update as if update(id) begin raiserror('不能更新',16,1) rollback tran return return end --测试 update ta set id=10 select * from ta id name ----------- ---------- 1 a 2 b(所影响的行数为 2 行)
先select 后update? 用instead of update这个类型的触发器
select id,value, CONVERT( binary(8),convert( char(8),modifystamp) from tbl1 where id=1UPDATE tbl1 SET value = '1216' WHERE id=1 and CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b' ---'0x0000000000001A7b' 是我从上面select出来的 但这样不对 CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b' 不成立
如果select的时间戳,和update时不一样
第二个人就不该update我的语句不会写
create table ta(id int ,name varchar(10))
insert ta select 1,'a'
insert ta select 2,'b'create trigger test_tr on ta
for update
as
if update(id)
begin
raiserror('不能更新',16,1)
rollback tran
return
return
end
--测试
update ta set id=10
select * from ta
id name
----------- ----------
1 a
2 b(所影响的行数为 2 行)
用instead of update这个类型的触发器
id,value, CONVERT( binary(8),convert( char(8),modifystamp) from tbl1 where id=1UPDATE tbl1 SET value = '1216' WHERE id=1 and CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b'
---'0x0000000000001A7b' 是我从上面select出来的
但这样不对
CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b'
不成立
我现在换思路了2个用户同时
select 数据
下一步直接update了
如果已经更新过,第二个用户就需要重新select了
如果在毫秒级上两个人同时update了,锁就让他锁住吧,呵呵.
tbl1 SET value = '1219'
WHERE
id=1 and @@dbts =( select modifystamp from tbl1 )update语句前后都 select value 来判断update是否成功