У меня есть хранимая процедура, которая принимает строку 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