Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    cancellazione in cascata in tabella AUTOREFERENZIATA

    ciao a tutti,
    SQL-server mi permette di associare ad un campo chiave esterna che si riferisce alla chiave primaria della stessa tabella (autoreferenziata).
    non mi permette però di implemetare il trigger di cancellazione dei record correlati.
    prima di scervellarmi per costruirmi una funzione apopsita, qualcuno ha già incontrato un problema del genere? avete consigli?
    ciao
    massimiliano
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  2. #2
    Utente di HTML.it L'avatar di Gioba66
    Registrato dal
    Jun 2002
    Messaggi
    2,189
    dipende come definisci la chiave esterna.
    c'è anche la modalità di delete a cascata. ma forse non ho capito bene la domanda... mi sconcerta la tua affermazione:

    non mi permette però di implemetare il trigger di cancellazione dei record correlati.

    che cosa intendi?
    Tutti vogliono parlare, nessuno sa ascoltare.

  3. #3
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    scusa, sono ignorante in merito, ma solitamente basta impostare un delete on cascede, senza scomodare i trigger.

  4. #4
    non mi permette di definire un "ON CASCADE DELETE"
    ho detto trigger intendendo un EVENTO generico
    (hai capito bene)

    tabella
    id | nome | id_parent

    id_parent è referenziato a tabella.id
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  5. #5
    Utente di HTML.it L'avatar di Gioba66
    Registrato dal
    Jun 2002
    Messaggi
    2,189
    dipende dalla logica delle chiavi.
    forse le hai definite male, e hai creato un loop
    sqlserver ti avvisa di questo quando provi a crearle con l'evento di delete a casacata. è il tuo caso?
    Tutti vogliono parlare, nessuno sa ascoltare.

  6. #6
    si, sostanzialmente il messaggio di sql-server che essendo una chiave autoreferenziata non è possibile creare l'evento on delete, perchè "c'è il rischio" DI CREARE PROCEDURE CHE VANNO IN LOOP.
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  7. #7
    Utente di HTML.it L'avatar di Gioba66
    Registrato dal
    Jun 2002
    Messaggi
    2,189
    perfetto.
    allora devi cercare di capire quale relazioni di quelle già create puoi eliminare di modo da evitare il loop
    Tutti vogliono parlare, nessuno sa ascoltare.

  8. #8
    Originariamente inviato da Gioba66
    perfetto.
    allora devi cercare di capire quale relazioni di quelle già create puoi eliminare di modo da evitare il loop
    non devo eliminare nessuna relazione perchè l'unica che mi serve è prorpio quella che ho descritto (e di fatto è IMPOSSIBILE CHE POSSA MANDARE IN LOOP). questo perchè ad esempio se creo una tabella (Table1) con i seguenti campi:
    ID | NOME | ID_REF

    e vado in modalità design -> manage relationship....scheda relationships e "new". se seleziono come PK table Table1 (colonna ID) e come FK table sempre Table1 (colonna ID_REF) si disabilitano in automatico le spunte Cascade xxxx.
    a questo punto sql-server anzi, quelli di microsoft sostengono che non si può fare perchè può creare dei loop ma a rigor di logica ciò potrebbe accadere se la tabella contenesse infiniti record.
    per cui l'unica è scervellarsi, vedrò di trovare una soluzione alternativa.
    intanto grazie per l'aiuto
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  9. #9
    per mandare in loop il meccanismo bastano due record fatti cosi'

    ID - VALORE - PADRE

    1 - pippo - 2
    2 - pluto - 1

    se non addirittura un solo record fatto cosi'

    3 - ciccio - 3


    non ti pare?

  10. #10
    Originariamente inviato da optime
    per mandare in loop il meccanismo bastano due record fatti cosi'

    ID - VALORE - PADRE

    1 - pippo - 2
    2 - pluto - 1

    se non addirittura un solo record fatto cosi'

    3 - ciccio - 3


    non ti pare?
    no, nel primo caso vado per cancellare il record ID = 1, per cui SQLserver dovrebbe cancellare il 2 in cascata e poi 1 (che anche se ha un riferimento al record 2 non importa perchè è già stato cancellato) e il cerchio si chiude.

    nel secondo vado a cancellare il record con ID = 3 e sql-server "dovrebbe" cancellare in cascata quello con ID = 3 cioè sempre lo stesso e il cerchio si chiude.

    naturalmente se la funzione ON DELETE interna ad SQL-Server è ben progettata.
    infatti implementando una funzione equivalente da codice, non vedo come possa andare in loop.
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.