无法改变/放下触发器

时间:2013-09-17 05:34:36

标签: sql-server sql-server-2008 triggers timeout locking

我无法更改触发器,因为它花了超过80分钟,并且也无法删除/删除,而在尝试从Designer模式执行此操作时,它显示错误为

- > Drop Failed for trigger. "LOCK request timeout period exceeded." enter image description here 但是同样的触发器在包含相同表的其他数据库中是ALTER / DROP。

  • 我更改了Table and Database Designers事务超时 如某些表格所示,在30000秒之后。
  • 并取消选中 Prevent saving changes that require table re-creation里面 TOOLS->选项 - >设计师。 运行Activity监视器后 enter image description here

我的触发器没有改变/丢弃由于这个原因吗?还是其他一些原因?

enter image description here

2 个答案:

答案 0 :(得分:6)

很可能在桌面上有另一个打开事务的进程。 要查找哪些流程有未结交易:

  1. DBCC OPENTRAN (的数据库)
  2. exec sp_who2
  3. 从SSMS右键单击服务器名称,选择Activity Monitor。如果您在尝试更改触发器时运行它,则可以查看blocked by列。
  4. 然后你需要将具有开放事务或最坏情况的spid结束到kill spid

答案 1 :(得分:0)

CREATE PROC er_kilitlenmecoz as
declare @max_count int, @count int, @sqlstring varchar(100)
declare @spid_table table (spid int NOT NULL)

INSERT @spid_table
select spid
from master.dbo.sysprocesses
where spid in (select blocked from master.dbo.sysprocesses where blocked <> 0) and blocked = 0

select @max_count = MAX(spid) FROM @spid_table
select top 1 @count = spid from @spid_table

while @count <= @max_count
begin
select @sqlstring = 'kill ' + CONVERT(varchar(4), @count)
exec(@sqlstring)
print @sqlstring

IF @count = @max_count
begin
break
end
ELSE
BEGIN
select top 1 @count = spid FROM @spid_table where spid > @count
end
end

---运行SCRİPT - DİSABLETRİGGER