SQL ALTER TRIGGER挂

我试图改变一个SQL Server 2000的更新触发器,但其并挂挂挂。 这可能是为什么发生,我能做些什么来解决呢? 这是一个漫长的触发,会是什么原因?

触发代码很长,但略如下:

ALTER TRIGGER [dbo].[UP_AL_ItemUPCs] ON [dbo].[AL_ItemUPCs] FOR UPDATE AS SET XACT_ABORT ON Declare @vError varchar(254) Declare @iUpdateCount int Select @iUpdateCount = Count ( D.UPCID ) From deleted D If @iUpdateCount > 1 Begin Raiserror ( 'This Table maintains AVANTI data ... mass updates cannot be done, yet' , 16 , 1 ) Rollback Goto Exit_ End Declare @iUpdateCheck int Declare @OldItemNumber varchar(50) Declare @ItemNumber varchar(50) Declare @OldItemPrefix varchar(5) Declare @ItemPrefix varchar(5) Declare @OldItemCode varchar(25) Declare @ItemCode varchar(25) Declare @OldItemSuffix varchar(5) Declare @ItemSuffix varchar(5) Declare @vOldCustomerCode varchar(24) Declare @vNewCustomerCode varchar(24) If Update ( [CustomerCode] ) Begin Select @vOldCustomerCode = D.CustomerCode , @vNewCustomerCode = U.CustomerCode From deleted D Inner Join inserted U On D.UPCID = U.UPCID End Else Begin Select @vOldCustomerCode = U.CustomerCode , @vNewCustomerCode = U.CustomerCode From deleted D Inner Join AL_ItemUPCs U On D.UPCID = U.UPCID End If Update ( ItemPrefix ) Or Update ( ItemCode ) Or Update ( ItemSuffix ) Begin If Update ( ItemPrefix ) Begin Select @OldItemPrefix = D.ItemPrefix , @ItemPrefix = U.ItemPrefix From deleted D Inner Join inserted U On D.UPCID = U.UPCID End Else Begin Select @OldItemPrefix = U.ItemPrefix , @ItemPrefix = U.ItemPrefix From deleted D Inner Join AL_ItemUPCs U On D.UPCID = U.UPCID End If Update ( ItemCode ) Begin Select @OldItemCode = D.ItemCode , @ItemCode = U.ItemCode From deleted D Inner Join inserted U On D.UPCID = U.UPCID End Else Begin Select @OldItemCode = IsNull ( U.ItemCode , '' ) , @ItemCode = IsNull ( U.ItemCode , '' ) From deleted D Inner Join AL_ItemUPCs U On D.UPCID = U.UPCID End If Update ( ItemSuffix ) Begin Select @OldItemSuffix= D.ItemSuffix , @ItemSuffix = U.ItemSuffix From deleted D Inner Join inserted U On D.UPCID = U.UPCID End Else Begin Select @OldItemSuffix = IsNull ( U.ItemSuffix , '' ) , @ItemSuffix = IsNull ( U.ItemSuffix , '' ) From deleted D Inner Join AL_ItemUPCs U On D.UPCID = U.UPCID End Set @OldItemNumber = @OldItemPrefix + '-' + @OldItemCode Set @ItemNumber = @ItemPrefix + '-' + @ItemCode If @OldItemNumber = @ItemNumber Goto Skip_ItemUpdate Set @iUpdateCheck = 0 Select @iUpdateCheck = @iUpdateCheck + IsNull ( Count ( recid ) , 0 ) From [AVANTISERVER\NCL_MASTER].AVANTI.dbo.InventoryTrans C Where C.InvItemNumber =@OldItemNumber -- Inner Join deleted D On C.InvItemNumber = D.ItemPrefix + '-' + D.ItemCode + IsNull ( D.ItemSuffix , '' ) Select @iUpdateCheck = @iUpdateCheck + IsNull ( Count ( recid ) , 0 ) From [AVANTISERVER\NCL_MASTER].AVANTI.dbo.InventoryLocations C Where C.LocItemNumber =@OldItemNumber And C.LocQtyOnHand <> 0 -- Inner Join deleted D On C.LocItemNumber = D.ItemPrefix + '-' + D.ItemCode + IsNull ( D.ItemSuffix , '' ) Select @iUpdateCheck = @iUpdateCheck + IsNull ( Count ( * ) , 0 ) From [AVANTISERVER\NCL_MASTER].AVANTI.dbo.JobItems C Where C.Item_Code = @OldItemNumber -- Inner Join deleted D On C.Item_Code = D.ItemPrefix + '-' + D.ItemCode + IsNull ( D.ItemSuffix , '' ) If @iUpdateCheck > 0 Begin Raiserror ( ' Item(s) cannot be updated due to associated AVANTI information ! ' , 16 , 1 ) Rollback Goto Exit_ End Update [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader Set [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.ItemNumber = @ItemNumber From [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader AI Where AI.ItemNumber = @OldItemNumber And AI.ColourStyle = @vOldCustomerCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'ItemNumber' , @ItemNumber , @OldItemNumber From deleted D Inner Join inserted U On D.UPCID = U.UPCID Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'ItemPrefix' , U.ItemPrefix , D.ItemPrefix From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.ItemPrefix <> U.ItemPrefix Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'ItemCode' , U.ItemCode , D.ItemCode From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.ItemCode <> U.ItemCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'ItemSuffix' , U.ItemSuffix , D.ItemSuffix From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.ItemSuffix <> U.ItemSuffix Update AL_PO Set AL_PO.ItemCode = @ItemNumber From deleted I Inner Join AL_PO PO On I.UPCID = PO.UPCID Where PO.Status <> 'Closed' End Skip_ItemUpdate: If Update ( [CustomerCode] ) Begin Update [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader Set [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.ColourStyle = U.CustomerCode From deleted D Inner Join inserted U On D.UPCID = U.UPCID Inner Join [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader AI On AI.ItemNumber = @ItemNumber And AI.ColourStyle = @vOldCustomerCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'CustomerCode' , U.CustomerCode , D.CustomerCode From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.CustomerCode <> U.CustomerCode End If Update ( [UPC] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'UPC' , U.UPC , D.UPC From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.UPC <> U.UPC End If Update ( [ImageName] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'ImageName' , U.ImageName , D.ImageName From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.ImageName <> U.ImageName End If Update ( [Description] ) Begin Update [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader Set [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.[Description] = Cast ( U.[Description] as varchar(60) ), [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.OldDescription = Cast ( U.[Description] As varchar(60) ) From deleted D Inner Join inserted U On D.UPCID = U.UPCID Inner Join [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader AI On AI.ItemNumber = @ItemNumber And AI.ColourStyle = @vNewCustomerCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'Description' , U.[Description] , D.[Description] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[Description] <> U.[Description] End If Update ( [Box] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'Box' , U.[Box] , D.[Box] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[Box] <> U.[Box] End If Update ( [QtyPerBox] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'QtyPerBox' , U.[QtyPerBox] , D.[QtyPerBox] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[QtyPerBox] <> U.[QtyPerBox] End If Update ( [TransFat] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'TransFat' , U.[TransFat] , D.[TransFat] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[TransFat] <> U.[TransFat] End If Update ( [Length] ) Begin Update [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader Set [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.Size1 = U.Length From deleted D Inner Join inserted U On D.UPCID = U.UPCID Inner Join [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader AI On AI.ItemNumber = @ItemNumber And AI.ColourStyle = @vNewCustomerCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'Length' , U.[Length] , D.[Length] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[Length] <> U.[Length] End If Update ( [Height] ) Begin Update [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader Set [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader.Size2 = U.Height From deleted D Inner Join inserted U On D.UPCID = U.UPCID Inner Join [AVANTISERVER\NCL_MASTER].Avanti.dbo.InventoryHeader AI On AI.ItemNumber =@ItemNumber And AI.ColourStyle = @vNewCustomerCode Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'Height' , U.[Height] , D.[Height] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[Height] <> U.[Height] End --Similar blocks ommitted for brevity If Update ( [FileRevision] ) Begin Insert Into AL_ItemUPCChanges ( UPCID , ChangeType , FieldName , NewValue , OldValue ) Select D.UPCID , 'Update' , 'FileRevision' , U.[FileRevision] , D.[FileRevision] From deleted D Inner Join inserted U On D.UPCID = U.UPCID Where D.[FileRevision] <> U.[FileRevision] End Exit_:

--------------解决方案-------------

难道是被阻止? 你检查sysprocessessp_who2 ? 运行以下命令:

EXEC sp_who2;

(从不同的窗口中运行它。)

您可能会看到在一个值BlkBy列在你原来的窗口匹配的SPID排在那里你要提交更改。 然后你可以一下SPID在同一个结果行(S),看看他们正在运行的产品。 要确定它究竟是什么,你可以使用:

DBCC INPUTBUFFER(x);

(“X”替换与被引起阻塞的SPID)。

如果确定本次会议是一次性的,你可以运行:

KILL x;

(再次更换与SPID'X')。

不过这应该是最后的手段-发行前KILL我建议你,而弄清楚它是什么,它为什么要花这么长时间。 一个ALTER TRIGGER应该是一个比较快速的DDL操作,但它确实需要底层对象独占访问...所以你可能要安排你修改一个维护窗口或至少在一段相对安静的活动。

分类:SQL 时间:2012-01-01 人气:31
分享到:

相关文章

  • Windows Vista中 - V - Word 2000中 2014-04-18

    我是一个技术恐惧. 是Word 2000中与Windows Vista兼容? 一个谁知道一个简单的问题. 非常感谢. --------------解决方案------------- 嗨! 感谢在这个论坛写:)是的,处2000 / Word 2000中确实应该在Vista上运行. 你好,安吉 对于未来的参考,你可以查找两个软件,兼容性网站上的硬件兼容性:http://www.microsoft.com/windows/compatibility/ 谢谢. 大卫 微软答案支持工程师 请访问我们的微软

  • 不能在Publisher 2010中打开Publisher 2000中的文件 2014-11-10

    Publisher 2000中的文件将打开罚款从2010年发布之内,但是当我试图通过单击文件本身,打开它,我得到的消息"xxx.pub不是有效的运32的应用程序." 我跑win7的,64位. 我曾尝试文件关联的变化和2010酒吧内打开文件和"另存为",但文件仍然无法打开. --------------解决方案------------- 是否会发生的问题与特定的Publisher文件或全部都保存在2000格式的文件吗? 检查系统上安装的多个版本的Office; 如果存

  • Outlook 2007中与Exchange 2000中 2012-08-19

    是否有可能到Outlook 2007连接到Exchange 2000 Server? 如果是这样,什么是我需要或者你可以直接向我描述的文章的步骤? --------------解决方案------------- 它连接到Exchange 2000它做任何版本的Exchange以同样的方式,你会想念任何Outlook 2007的功能的Exchange Server 2000不支持; 否则,它应该工作的罚款. 哈尔 - 哈尔霍斯泰特勒,CPBE 高级工程师/ MIS - MS MVP-打印/影像 -

  • Windows 7中,Access 2000中运行时,Office 2003和无尽的MSIEXEC 1001错误,当我加载任何办公应用 2015-01-26

    我们有所需的访问2000 runtine的应用程序. 它安装和Office 2003安装在它的上面后,每次启动Office应用程序通过调用Windows安装程序,并在一分钟后停止,并且应用程序永远不会触发. 在应用程序日志事件msiinstaller 1001如果我直接去办公室的目录,并尝试火起来说WINWORD.EXE将加载,但随后说,这不安装应用程序为当前用户和关机. 非常令人沮丧. 尝试卸载/重新安装,已检查的权限,做的o2k3一个完整干净关闭Windows 7 64位系统还是一样的结果.

  • SQL Server 2000中 - 编程方式限制访问数据库所有者? 2012-09-21

    我将如何编程方式去限制数据库所有者为数据库的数据库的SQL Server 2000中的访问? 例如,如果我用鼠标右键单击在企业管理器"罗斯文"数据库"属性",业主被列为sa 我将如何限制访问这个数据库只是sa登录? --------------解决方案------------- 您可以将数据库设置为RESTRICTED_USER可用性. ALTER DATABASE MyDatabase SET RESTRICTED_USER -- OR -- ALTER DATA

  • SQL Server 2000中到SQL Server 2008:可以将2000数据库恢复到2008年的架构? 2013-03-03

    比方说,我们有两个SQL Server 2000数据库: PARTS CUSTOMERS 他们可以恢复到SQL Server 2008合并为一个数据库中,但使用的架构分开,这样就不会有零件模式和架构客户? 可在2000数据库恢复"到2008年的模式"? --------------解决方案------------- 您无法恢复两个数据库到一个单一的数据库中. 你需要逐一还原每个数据库,然后手工将它们结合起来. 或者,您可以创建每个数据库的T-SQL脚本,这两个脚本适当地组合,然后执行脚

  • 在SQL Server 2000中的非系统数据库 2013-07-22

    如何从SQL Server 2000中使用T-SQL查询中的所有非系统,数据库的名称? 我预料到: SELECT * FROM sysdatabases where dbid >4 order by dbid 它似乎并不可靠. 还要别的吗? --------------解决方案------------- 从SQL Server 2000联机丛书: SQL Server的每个实例有四个系统数据库(master,模型,tempdb数据库和msdb)和一个或多个用户数据库. 因此,大师,模型,MSDB

  • 使用OPENROWSET连接到从SQL Server Management Studio中的Access 2000数据库 2014-05-08

    我试图连接从SQL Server Management Studio中的Access 2000数据库. 我当前的查询是: sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO Select FName From OpenRowSet('Microsoft.ACE.OLEDB.12.0', '\\bespin\Fil

  • 如何从视图中的另一个数据库(在另一台服务器)的数据导入到SQL Server 2000中的表? 2014-11-06

    我想使用BCP命令来解决用户身份验证,但不能够在BCP命令导入到一个表在我的数据库? 顺便说一句,我使用的SQL Server 2000环境. 以下是我有这么远的代码: SET @Command ="BCP"选择vwTest *从[MYSERVER \ SQL] .test.dbo.vwTest."queryout dbo.Test -C ACP -c -r \ N-叔";" -s服务器\ SQL -Umyuser -Puser1" EXEC m

  • SQL Server 2000中与2005+的样本数​​据库,研究数据库设计? 2015-02-11

    我一直努力学习使用最新的SQL Server,书籍,文章,文档的版本. 我开始怀疑它是否是有效的. 我已经得到了我经常低效失去的时间与基于臃肿AdventureWorksXXX样本数据库从SQL Server 2005 +学习材料的感觉. 即使是最简单的原则和概念的模糊与笨重的查询例子,结果,表格,数据,计划,关系等, 那岂不是更好地自学数据库设计上更小,可观察到的SQL Server 2000(酒吧,罗斯文)示例数据库,文章,书籍,在线课程? 我该失去这种做法? 什么是SQL Server 2

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.876 (s). 11 q(s)