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