sqlserver锁表、解锁、查看销表的方法
锁定数据库的一个表
SELECT*FROMtableWITH(HOLDLOCK)
注意:锁定数据库的一个表的区别
SELECT*FROMtableWITH(HOLDLOCK)
其他事务可以读取表,但不能更新删除
SELECT*FROMtableWITH(TABLOCKX)
其他事务不能读取表,更新和删除
SELECT语句中“加锁选项”的功能说明
SQLServer提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQLServer的缺省设置也可以在select语句中使用“加锁选项”来实现预期的效果。本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明
查看被锁表:
selectrequest_session_idspid,OBJECT_NAME(resource_associated_entity_id)tableName fromsys.dm_tran_lockswhereresource_type='OBJECT'
spid锁表进程
tableName被锁表名
[@more@]
解锁:
创建一个临时Table
CREATETABLE#HarveyLock ( SPIDINT, DBIDINT, OBJIDINT, INDIDINT, TYPEVARCHAR(100), RESOURCEVARCHAR(100), MODEVARCHAR(100), STATUSVARCHAR(100) )
将Lock信息存入该Table
INSERTINTO#HarveyLockEXECSP_LOCK
3.在Table中下条件查询得到的LOCK
SELECT*FROM#HarveyLock
4.KILL相关LOCK
KILL@SPID
例
declare@spidint Set@spid=57--锁表进程 declare@sqlvarchar(1000) set@sql='kill'+cast(@spidasvarchar) exec(@sql)