延迟 AFTER UPDATE 执行,直到其他更新过程完成

Delay AFTER UPDATE execution until other updating processes are completed

请原谅我,我对制作 SQL 服务器触发器的艺术还很陌生。

我制作了一个 SQL 服务器触发器,它将在特定 table 更新后执行 PowerShell 脚本(向实体 X 发送 JSON 消息)。脚本 运行 在 DEV 中如预期的那样成功。但是,当实例化为触发器时,它会在用户提交更新后导致前端 UI 出错。用户更新没有post,显然没有实例化触发器

我猜测它与 post 通过网络 UI 用户输入期间的 table 锁定有关,但这只是一个猜测。我应该在触发器中考虑哪些事情不会干扰前端 UI 在我的触发器 运行 之前首先更新 table 的控制过程?

这是我的(比较原始的)触发器,供大家阅读

USE [Hamburger_Chefs32];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO

CREATE TRIGGER [dbo].[WD_SendIngredientsMessageOnScoreOverrideUPD] 
ON dbo.DeliciousBurgers
AFTER UPDATE
AS
BEGIN
    DECLARE @cmd sysname

    SET @cmd = 'powershell -File "E:\Program Files (x86)\TheWhopperCorporation\Burgers\v1.0.0\service\SendIngredients.ps1"'

    EXEC xp_cmdshell @cmd
END
GO   

非常感谢您提供的任何帮助。

更新:建议不要从 TRIGGER 中 运行 脚本,因为它必须等待它完成。好点子。有没有一种方法可以简单地执行脚本而不必等待脚本成功(1)或失败(0)?它 运行 在 100% 的时间里都是完美的,但我不想因为时间 and/or 对脚本的依赖而遭受更新的回滚。

以这种方式更改触发器:

CREATE TRIGGER [dbo].[WD_SendIngredientsMessageOnScoreOverrideUPD] 
ON dbo.DeliciousBurgers
AFTER UPDATE
AS
BEGIN
    set xact_abort off; 
    begin try
       DECLARE @cmd sysname

       SET @cmd = 'powershell -File "E:\Program Files (x86)\TheWhopperCorporation\Burgers\v1.0.0\service\SendIngredients.ps1"'

       EXEC xp_cmdshell @cmd
   end try

    begin catch
       print ERROR_MESSAGE()
    end catch

END

这样你就会发现错误。

此处最可能的错误是

The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.

除非运行您的应用程序的用户是 sysadmin,或者被明确授予此权限,否则会发生错误。

并且回滚了整个事务,这就是 "The users update did not post".

的原因