Триггер SQL Server застрял при выполнении - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь запустить командный файл в триггере SQL Server, чтобы получить информацию из запроса и поместить ее в текстовый файл. Я пытаюсь сделать это, потому что я хочу сделать что-то с информацией в том же пакетном файле позже. Проблема в том, что при вызове триггера он застревает при выполнении.

Я протестировал запрос и вызов пакетного файла в Microsoft SQL Server Management Studio, и они оба работают, но когда я вызываю пакетный файл в триггере, он застревает при выполнении.

Вот мой код. Сначала пакетный файл, а затем триггер, запросить пакетный файл вызывает, и мой запрос для проверки триггера

@echo off
echo start
sqlcmd -S AZ7GH2\SQLEXPRESS -h -1 -i C:\Users\user1\Documents\test3.sql -o C:\Users\user1\Documents\test.txt
echo end
exit

Триггер SQL Server

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[ffupdate] 
ON [dbo].[feat] 
AFTER UPDATE
AS
BEGIN
    IF UPDATE (act)
    BEGIN
        EXEC xp_CMDShell 'C:\Users\user1\Documents\ffscript.bat'
    END
END

test3.sql (запрос вызывается из пакетного файла)

:setvar SQLCMDERRORLEVEL 1
SET NOCOUNT ON

USE [dev]

DECLARE @ver INT
SET @ver = CHANGE_TRACKING_CURRENT_VERSION() - 1

CREATE TABLE #ctb(fuid INT)  

INSERT INTO #ctb
    SELECT featid
    FROM CHANGETABLE(CHANGES feat, @ver) AS tb

SELECT fl.flg
FROM fl, #ctb
WHERE fl.fid = #ctb.fuid
GO

:setvar SQLCMDERRORLEVEL 0
SET NOCOUNT OFF

Запрос на проверку триггера

USE [dev]

UPDATE feat
SET act = 0
WHERE featid = 1;

Я не знаю, что не так. Я искал ответ и не могу его найти. Как я уже сказал, все прекрасно работает само по себе, но когда все вместе, оно застревает при выполнении. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 июля 2018

Вы запираете себя!

У вас есть триггер в таблице FEAT , и когда вы обновляете одну строку (сеанс A), вы создаете новый сеанс (сеанс B через пакет), который пытается прочитать некоторую информацию захвата на стол FEAT .

...