MsSQL Trigger не работает для нескольких вставок - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть хранимая процедура, которая принимает строку XML в качестве параметра.Этот XML вставляет в таблицу переменное количество записей.

Однако в таблицу, в которую она вставляется, установлен триггер, чтобы при каждой вставке что-то еще происходило с другой таблицей.

Проблема, с которой я сталкиваюсь, заключается в том, что она обрабатывает вставку XML как вставку в одну строку, даже если через процедуру вставлено 10 записей, триггер запускается только один раз.

Есть ли способ обойти это,все еще используются триггеры или мне нужно идти другим путем?

 @departments XML = <departments>
    <department>
        <departmentID>123</departmentID>
    </department>
    <department>
        <departmentID>456</departmentID>
    </department>
 </departments>


 -- Add new department into primary table
INSERT INTO careerpath.LatticeDepartment (LatticeID,DepartmentID,DepartmentOrder)

SELECT @latticeID,
        ParamValues.x1.value('departmentID[1]', 'int'),
        99
FROM @departments.nodes('/departments/department') AS ParamValues(x1)

Таблица cp.Department имеет триггер Это запускается только один раз, даже если хранимая процедура вставляет 10 записей вcareerpath.LatticeDepartment.

-- Insert statements for trigger here

DECLARE @latticeID int
DECLARE @departmentID INT

SELECT @latticeID = Inserted.LatticeID, @departmentID = Inserted.DepartmentID
FROM Inserted

-- count number of titles
DECLARE @numTitles INT

SELECT @numTitles = COUNT(TitleID)
FROM careerpath.LatticeTitle
WHERE LatticeID = @latticeID

-- check if there are titles with same latticeID
IF @numTitles >= 1
BEGIN

    -- create new boxes for all titleID's with given latticeID and DepartmentID

    INSERT INTO careerpath.Box
    (
        LatticeID,
        DepartmentID,
        TitleID
    )
    SELECT @latticeID,
        @departmentID,
        TitleID
    FROM careerpath.LatticeTitle
    WHERE LatticeID = @latticeID

END
...