18. marts 2004 - 14:15Der er
9 kommentarer og 2 løsninger
Slet referencer
Hej Eksperter!
Jeg er ved at lave et website hvor der er menupunkter i flere niveauer. Alle siderne ligger i den samme tabel, og er bundet op på hinanden med refId'er og Levels.
Sletter jeg f.eks. en side på Level1, skal den gerne automatisk slette alle underliggende sider til denne.
Dette kan gøres hvis disse ligger i forskellige tabeller, men kan det lade sig (automatisk) når de ligger i samme tabel?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Du kan ikke umiddelbart godt definere en FK imellem forskellige kolonner på samme tabel (rekursiv relation), men du kan ikke sætte cascade update/delete på denne som du ellers nomalt ville kunne hvis det var mellem to tabeller du definere din FK constraint
En løsning kunne dog være at definere en trigger som sørgede for dette, men jeg ville personligt foretrække at bygge logikken ind i en Stored Procedure.
Det er en både pænere og mere læsevenlig løsning. Perfomance mæssigt vil den næsten helt sikkert også være bedre end en trigger ..
Kunne forestille mig noget i denne stil med en Stored Procedure (SP): (Husk det kun er reference kode og du må modificere den til dit endelige setup!)
CREATE PROCEDURE [dbo].[delMenuItem] @menuItemID INT
SET NOCOUNT ON AS
DECLARE @refID INT
-- First get menu reference -- I asume that one Id Only can have one refIdD! SELECT @refId = [refId] FROM [dbo].[tblMenu] WHERE [Id] = @menuItemID
BEGIN TRANSACTION -- Now for the delete .. -- First delete sub menu items based on @refID DELETE FROM [dbo].[tblMenu] WHERE [refId] = @refId -- Then delete main menu item based on @menuItemID DELETE FROM [dbo].[tblMenu] WHERE [Id] = @menuItemID -- Could place some error handling here .. COMMIT TRANSACTION
1: I SP'en får jeg 2 syntaksfejl. En ved 'SET' og en ved 'AS'. Det er muligvis fordi jeg selv skal indsætte noget, eller..? Jeg har som sagt ikke stiftet bekendskab med SP's før.
2: Jeg synes at kunne gennemskue, at funktionen ikke gør det jeg ønsker. Den sletter den aktuelle side og dennes undersider - men da der er 3 levels kan der i reliteten hænge en side på level 3 som ikke bliver slettet. Er det forståeligt?
Takker! Havde faktisk mistanke om at der var tale omm et recursivt hieraki, men det var bare ikke lige til at se ud fra de data du sendte første gang ..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.