日期:2014-05-18  浏览次数:20806 次

mssql2000k delete from 不能使用READPAST锁?
在mssql2000环境下在存贮过程写一行代码如下:

DELETE FROM autoNum WITH (READPAST);

运行结果提示:只有在 SELECT 语句中才允许使用 NOLOCK、READUNCOMMITTED 和 READPAST 锁提示!

问题:1、mssql2000k 环境是,delete from 不能使用READPAST锁?
  2、在sql查询分析器如何运行存贮过程(返回一个参数)

------解决方案--------------------
SQL code
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) 
其他事务不能读取表,更新和删除

------解决方案--------------------
人家说不能,那就是不能,锁是人家造的!
------解决方案--------------------
探讨
谢谢楼上!
有没有存贮过程详细点的介绍。

------解决方案--------------------
楼主是乱用啊,
这提示是用于 其它事务有改动某一条记录时,select用这提示可以过滤正在更新的记录,而不是在删除时提示
------解决方案--------------------
SQL code
--Create table autoNum(ID int identity primary key,number int)
insert autoNum select 10
insert autoNum select 20
insert autoNum select 30

--窗口1
begin tran
DELETE FROM autoNum WITH (rowlock,holdlock) where ID=1


--窗口2
begin tran
update autoNum WITH (rowlock,holdlock) 
set number=number+100
where ID=2

------解决方案--------------------
问题:
1、mssql2000k 环境是,delete from 不能使用READPAST锁?
--> 这是规定, 没什么好解释的哦.

2、在sql查询分析器如何运行存贮过程(返回一个参数) 
--> sql2000没有output参数,试试把结果select出来即可.
------解决方案--------------------
补充: 不确定sql2000是否有output参数,试试咯.