Avatar billede evilfish Nybegynder
20. marts 2010 - 13:26 Der er 6 kommentarer og
1 løsning

Foreign Key ON DELETE kan ikke sættes

Hej eksperter

Jeg forsøger at redigere en table hvor på der er en categoryID kolonne og en parentcategoryID kolonne, således at en kategori kan høre til en anden kategori. Dette virker fint nok, men problemet er at hvis en hovedkategori skal slettes, så skal alle underkatorier ryge med. Dette kan jo gøres ved at sætte ON DELETE egenskaben til CASCADE. Problemet er at jeg ikke må få lov til det af min SQL Server. Jeg bruger GUI, og de egenskaber er bare grå for mig. Altså at jeg ikke kan redigere dem.

De to kolonner er bygget op categoryID er primary og acceptere ikke null. parentcategoryID er foriegnkey til categoryID, men acceptere null. Kan det skyldes at parentID acceptering af null forhindre mig i at sætte min ON DELETE til CASCADE?
Avatar billede janus_007 Nybegynder
20. marts 2010 - 14:35 #1
Det skulle ikke betyde noget!

Nu kender jeg ikke så meget til GUI'en (eller rettere jeg bruger den nødigt)

Sæt din constraint sådan her:
alter table DitTable
add constraint FK_parent foreign key references DitTable(parentCategoryId) on delete cascade

_Hvad giver den?
Avatar billede Syska Mester
20. marts 2010 - 16:20 #2
Du siger du ikke "må" ... får du nogen fejl ? og præcis hvad skriver den?

GUI'en har nogen mærkelige settings som gør at man ikke må nogen ting, men det kan slås fra ... derfor jeg vil vide hvad den giver af fejl ...

mvh
Avatar billede evilfish Nybegynder
21. marts 2010 - 00:02 #3
Jeg har forsøgt jeres forslag:

ALTER TABLE ProductCategory
ADD FOREIGN KEY (ParentID) REFERENCES ProductCategory(CategoryID) ON DELETE CASCADE ON UPDATE NO ACTION

men her er hvad jeg får af fejl:

Msg 1785, Level 16, State 0, Line 1
Introducing FOREIGN KEY constraint 'FK__ProductCa__Paren__44FF419A' on table 'ProductCategory' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

For at i kan se hvordan tabellen er opbygget så er der et lille create script. Dette er genereret via GUI (Har fjernet en masse af det der er auto genereret):

CREATE TABLE [XXX].[ProductCategory](
    [CategoryID] [int] IDENTITY(1,1) NOT NULL,
    [ParentID] [int] NULL,
    [Name] [varchar](256) NOT NULL,
    [Picture] [varchar](512) NULL,
        PRIMARY KEY(CategoryID)
)

GO
Avatar billede janus_007 Nybegynder
21. marts 2010 - 15:25 #4
hmm... ja jo.. det er da også korrekt, det kan man ikke.

Så skal du lave en trigger istedet :) Eller en sproc til deletes.
Avatar billede evilfish Nybegynder
26. april 2010 - 10:29 #5
Undskyld den forsinkede kommentar her.

Janus du fik ret. At designe en trigger var den eneste løsning på problemet.

Tak skal i have for jeres tålmodighed.
Avatar billede evilfish Nybegynder
27. oktober 2010 - 10:46 #6
Janus, kan du lige svare, så vi kan få lukket tråden?
Avatar billede evilfish Nybegynder
13. januar 2011 - 14:22 #7
lukker tråden grundet alder.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester