Tsql 在两个表上插入后触发
我现在有以下触发器,但我现在有一个要求,只有在另一个表Tsql 在两个表上插入后触发,tsql,triggers,sql-server-2008-r2,Tsql,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'
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
你不能停止扣动扳机。您可以检查某些条件,然后从触发器返回。您的触发器已损坏<代码>插入的可以包含0、1或多行。你需要把它当作一个表格,而不是从中提取单个值。我这样设置它,以便我可以使用电子邮件主题和正文中的每个单独变量。有没有更好的方法来处理这个问题?我想我可以把@cat IN语句移到集合中吗?这对性能有帮助吗?但我只希望在满足这两个条件的情况下发送电子邮件。如果我这样设置变量,我会收到空白电子邮件,不是吗?我遗漏了什么吗?因为您调用的是存储过程,所以需要循环-即使用游标或类似工具。就像我说的,
inserted
可以包含多行。我将我的代码更新为您所指的内容。这就是你所说的桌子吗?现在我得到了我所期望的,但也收到了一些空白邮件。添加一个循环或光标应该有助于消除空白邮件吗?