Sql server 在事务外部查询

Sql server 在事务外部查询,sql-server,tsql,triggers,transactions,Sql Server,Tsql,Triggers,Transactions,我有一个触发器是的,我知道,在发出通知之前,需要检查对另一个表的一系列更新是否已经完成 由于源数据库是第三方数据库,而且在我看来设计得很糟糕,所以我无法避免在这样的触发器中执行此操作 问题在于触发器有自己的事务,并且没有检测到表的任何更改,因为它们发生在表之外 有没有办法绕过这个问题 在下面的代码中,我将从metricvalue表中获取值并使用它创建xml。目前,它没有得到所有可用的记录,因为在写入所有指标之前调用触发器。不幸的是,没有办法避免这种情况。我希望暂停0.5秒,然后进行查询,但由于事

我有一个触发器是的,我知道,在发出通知之前,需要检查对另一个表的一系列更新是否已经完成

由于源数据库是第三方数据库,而且在我看来设计得很糟糕,所以我无法避免在这样的触发器中执行此操作

问题在于触发器有自己的事务,并且没有检测到表的任何更改,因为它们发生在表之外

有没有办法绕过这个问题

在下面的代码中,我将从metricvalue表中获取值并使用它创建xml。目前,它没有得到所有可用的记录,因为在写入所有指标之前调用触发器。不幸的是,没有办法避免这种情况。我希望暂停0.5秒,然后进行查询,但由于事务问题,这不起作用

代码:


对不起,SQL Server 2012您能给出一些这种情况的示例代码吗?
ALTER TRIGGER  [dbo].[STR_MetricStatusChange]
ON [dbo].[MetricStatus]
FOR INSERT, UPDATE
AS 
BEGIN

DECLARE @Runid UNIQUEIDENTIFIER;
DECLARE @run_number INT;
DECLARE @sample_number INT;
DECLARE @primary_step INT;
DECLARE @secondary_step int;
DECLARE @secondary_step_maths_done int;
DECLARE @old_secondary_step_maths_done int;
DECLARE @primary_step_maths_done int;
DECLARE @old_primary_step_maths_done int;


DECLARE @Message nvarchar(MAX);

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


-- Get the fields we need from the current MetricStatus record
--
SELECT @Runid = i.runid,
       @run_number = r.Run_Number,
       @sample_number = i.sample_number,
       @primary_step = i.primary_step,
       @secondary_step_maths_done = i.secondary_step_maths_done,
       @primary_step_maths_done = i.primary_step_maths_done
FROM INSERTED i
    LEFT JOIN dbo.Runs r ON r.Run_id = i.runid  


-- Standard Metrics secondary step notification to Notification Queue
--
SELECT @Message = (SELECT (SELECT 0 AS MessageType FOR XML PATH (''), TYPE ),
                          (SELECT  @Runid AS RunId, @run_number AS RunNumber, @sample_number AS SampleNumber, @primary_step AS PrimaryStep, @secondary_step AS SecondaryStep, GETDATE() AS [TimeStamp] FOR XML PATH('Details'), TYPE),
                          (SELECT 
                                  (SELECT mv.MetricValue_MetricId AS '@MetricId',
                                          mv.MetricValue_Value AS Value
                                   FROM dbo.MetricValues mv
                                   WHERE MetricValue_RunId = @Runid and MetricValue_SampleNumber = @sample_number
                                   for XML PATH('Metric'), TYPE)
                           FOR XML PATH('Metrics'),TYPE)
                   FOR XML PATH (''), ROOT('Notification'))

-- Standard Metrics secondary step notification to Maths Engine Queue
--
EXEC dbo.usp_SendNotification @Message, 'MathsEngine';




END