次のトリガーがあり、実行時にエラーが発生します。
CREATE TRIGGER ...
ON ...
FOR INSERT, UPDATE
AS
IF UPDATE(STATUS)
BEGIN
DECLARE @newPrice VARCHAR(50)
DECLARE @FILENAME VARCHAR(50)
DECLARE @server VARCHAR(50)
DECLARE @provider VARCHAR(50)
DECLARE @datasrc VARCHAR(50)
DECLARE @location VARCHAR(50)
DECLARE @provstr VARCHAR(50)
DECLARE @catalog VARCHAR(50)
DECLARE @DBNAME VARCHAR(50)
SET @server=xx
SET @provider=xx
SET @datasrc=xx
SET @provstr='DRIVER={SQL Server};SERVER=xxxxxxxx;UID=xx;PWD=xx;'
SET @DBNAME='[xx]'
SET @newPrice = (SELECT STATUS FROM Inserted)
SET @FILENAME = (SELECT INPUT_XML_FILE_NAME FROM Inserted)
IF @newPrice = 'FAIL'
BEGIN
EXEC master.dbo.sp_addlinkedserver
@server, '', @provider, @datasrc, @provstr
EXEC master.dbo.sp_addlinkedsrvlogin @server, 'true'
INSERT INTO [@server].[@DBNAME].[dbo].[maildetails]
(
'to', 'cc', 'from', 'subject', 'body', 'status',
'Attachment', 'APPLICATION', 'ID', 'Timestamp', 'AttachmentName'
)
VALUES
(
'P23741', '', '', 'XMLFAILED', @FILENAME, '4',
'', '8', '', GETDATE(), ''
)
EXEC sp_dropserver @server
END
END
エラーは次のとおりです。
メッセージ 15002、レベル 16、状態 1、プロシージャ sp_MSaddserver_internal、行 28 プロシージャ 'sys.sp_addlinkedserver' はトランザクション内で実行できません。メッセージ 15002、レベル 16、状態 1、プロシージャ sp_addlinkedsrvlogin、行 17 プロシージャ 'sys.sp_addlinkedsrvlogin' はトランザクション内で実行できません。メッセージ 15002、レベル 16、状態 1、プロシージャ sp_dropserver、行 12 プロシージャ 'sys.sp_dropserver' はトランザクション内で実行できません。
このエラーの発生を防ぐにはどうすればよいですか?