Я использую SQL Server R2.Как создать триггер, который использует результаты из UDF для вставки в другую таблицу
две таблицы:
UserEntryAccess (EntryId, UserId)
ParentEntryRelation(Id, ParentType, ParentId, EntryId)
Когда запись вставляется в ParentEntryRelation, триггер должен получить список пользователей идентификаторами, которые в настоящее время имеют доступ подходя к таблице ParentEntryRelation и вставьте EntryID и UserId в UserEntryAccess. У меня есть функция с рекурсивным общим табличным выражением, которое извлекает эти идентификаторы пользователя. Отлично работает, yippee.
Вопрос: Что одного SQL-запроса можно использовать для вызова функции для каждой записи в таблице ВСТАВЛЯЕМОГО, и вставьте их результаты с EntryID в UserEntryAccess в одном операторе SQL.
Вот рекурсивное CTE:
CREATE FUNCTION [dbo].[GetUserAccessIds](@entryId as uniqueidentifier)
RETURNS @tempUserids table (userId uniqueidentifier)
AS
BEGIN
WITH RecursiveEntry (ParentId,EntryId,ParentType)
AS
(
-- Anchor member definition
SELECT ParentId,EntryId,ParentType from ParentEntryRelation
where ParentEntryRelation.EntryId = @entryId
UNION ALL
-- Recursive member definition
SELECT ParentEntryRelation.ParentId,
ParentEntryRelation.EntryId,
ParentEntryRelation.ParentType
from ParentEntryRelation
inner join RecursiveEntry on RecursiveEntry.ParentId = ParentEntryRelation.EntryId
)
insert into @tempUserids
SELECT distinct ParentId
from RecursiveEntry
where ((ParentType & 32) = 32) --32 is the ServerUser type
OPTION (MAXRECURSION 32767)
RETURN
END