t-sql - 在两个表上插入后触发

标签 t-sql triggers sql-server-2008-r2

我现在有以下触发器,但现在我需要仅在另一个表 Facility 插入一条 LocationID = 'ER'- 的记录时才启动触发器 -

根据评论,我更新了触发器 -

ALTER TRIGGER [dbo].[VoceraOeOrders] ON [dbo].[OeOrders]
FOR INSERT
AS
IF NOT EXISTS (
        SELECT *
        FROM dbo.Facility
        WHERE LocationID = 'ER'
        )
    RETURN

DECLARE @priority VARCHAR(50)
DECLARE @cat VARCHAR(50)
DECLARE @order VARCHAR(50)
DECLARE @procedure VARCHAR(50)
DECLARE @orderid VARCHAR(50)
DECLARE @locationid VARCHAR(10)
DECLARE @roomid VARCHAR(10)
DECLARE @visitid VARCHAR(50)

SELECT @visitid = VisitID
    ,@priority = Priority
    ,@cat = Category
    ,@procedure = OrderedProcedureName
    ,@order = OrderDateTime
    ,@orderid = OrderNumber
    ,@locationid = (
        SELECT LocationID
        FROM dbo.Facility
        WHERE VisitID = @visitid
        )
    ,@roomid = (
        SELECT CASE 
                WHEN RoomTreatmentID IS NULL
                    THEN 'No Room#'
                ELSE RoomTreatmentID
                END
        FROM dbo.Facility
        WHERE VisitID = @visitid
        )
FROM insterted
WHERE @priority = 'STAT'
    AND @cat IN (
        'CT'
        ,'MRI'
        ,'XRAY'
        ,'US'
        ,'RT'
        ,'NUC'
        ,'ECHO'
        )


BEGIN
    DECLARE @msg VARCHAR(500)
    DECLARE @subject VARCHAR(500)

    SET @msg = @procedure + ' - ' + @locationid + ' ' + @roomid + '-' + ' Priority ' + @priority + '.' + 'Order DateTime/Number ' + @order + '/' + @orderid
    SET @subject = 'Vocera Group Name Here'

    EXEC msdb.dbo.sp_send_dbmail @recipients = N'some_email'
        ,@body = @msg
        ,@subject = @subject
        ,@profile_name = 'Alert'
END

最佳答案

只需在触发器的开头添加:

if not exists(select * from facilities where FacilityID = 'ER')
return

你无法停止扣动扳机。您可以检查某些条件并从触发器返回。

关于t-sql - 在两个表上插入后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930626/

相关文章:

mysql - 当条件为真时,如何使用 MySQL 触发器更新多个表?

mysql - SQL Server 2008 R2 到 MySQL 迁移

sql-server-2008-r2 - 当我不使用 RC4 时,SQL Server 弃用公告在登录时使用 RC4

c# - SSIS 2015 脚本任务将文本文件转换为 C# 或 VB 中的 UTF8

c# - 调用DacService.Deploy后如何取消和回滚升级包?

sql - DBMS_CHANGE_NOTIFICATION 和 NEW_REG_START

mysql - 如何在表上创建插入触发器?

sql - 旋转两列,保持表中的其他列不变

sql - 使用带有通配符查找的 T-SQL REPLACE 来替换字段值

sql - 如何将SQL Server 2012数据库还原到SQL Server 2008 R2?