J'utilise SQL Server R2.Comment créer un déclencheur qui utilise les résultats d'une fonction définie par l'utilisateur pour l'insérer dans une autre table
Deux tables:
UserEntryAccess (EntryId, UserId)
ParentEntryRelation(Id, ParentType, ParentId, EntryId)
Lorsqu'un enregistrement est inséré dans ParentEntryRelation, un déclencheur a besoin pour obtenir la liste des ids des utilisateurs qui ont actuellement accès à pied la table ParentEntryRelation, et insérez la ENTRYID et UserId dans UserEntryAccess. J'ai une fonction avec une expression de table commune récursive qui récupère ces identifiants d'utilisateur. Fonctionne très bien, yippee.
La question: Quelle requête SQL simple puis-je utiliser pour appeler la fonction pour chaque enregistrement de la table inserted et insérez ces résultats avec le ENTRYID en UserEntryAccess en une seule instruction SQL.
Voici le CTE récursive:
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