1

我无法更改触发器,因为它需要超过 80 分钟,也无法删除/删除,同时尝试从设计器模式执行此操作时显示错误为

->Drop Failed for trigger. "LOCK request timeout period exceeded." 在此处输入图像描述 但相同的触发器在包含相同表的其他数据库中已被 ALTER/DROP。

  • 根据某些表格的建议,我已将Table and Database Designers事务超时更改为 30000 秒。
  • 并取消选中 Prevent saving changes that require table re-creation TOOLS->OPTION->DESIGNER。运行活动监视器后 在此处输入图像描述

我的触发器不是因为这个而改变/丢弃吗?还是其他什么原因?

在此处输入图像描述

4

2 回答 2

7

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

  1. DBCC OPENTRAN (数据库)
  2. 执行 sp_who2
  3. 从 SSMS 右键单击​​服务器名称,选择Activity Monitor. 如果您在尝试更改触发器时运行它,您可以查看该blocked by列。

那么你需要结束有开放事务或最坏情况的 spidkill spid

于 2013-09-17T05:57:02.247 回答
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

--- 运行脚本--禁用触发器

于 2017-06-30T08:29:43.877 回答