Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290

    [MSSQL] Come si "sbrogliano" le FK circolari?

    Buon giorno, sono alle prese con il malefino MS SQL e le "auto FK", che non so come gestire,
    ovvero le FK che formano una sorta di ciclo.

    Pippo ha un FK su pluto; pluto ha una FK su pippo; pippo ha un FK su un campo (diverso) di pluto.

    In pratica se cerco di cancellare una riga di una tabella, me lo impedisce perchè una FK sulla seconda tabella.
    Se cerco di cancellare la riga della seconda tabella, me lo impedisce perchè c'è una FK verso la prima.


    PS se la risposta è "elimina o disattiva le FK, cancella, poi riattivale" c'ero già arrivato,ma mi servirebbe la risposta "giusta"...

  2. #2
    perché MSSQL sarebbe malefico? con altri db il problema non si presenterebbe?

  3. #3
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da optime Visualizza il messaggio
    perché MSSQL sarebbe malefico? con altri db il problema non si presenterebbe?
    Non ne ho idea, non le ho mai viste usare così in mysql, forse perchè semplicemente non sono mai esistite, le FK, per la stragrande maggioranza degli host dei poveri (con myisam)

    Comunque per tornare al tema... qualche suggerimento?

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da brancomat Visualizza il messaggio
    PS se la risposta è "elimina o disattiva le FK, cancella, poi riattivale" c'ero già arrivato,ma mi servirebbe la risposta "giusta"...
    Non c'è un modo giusto per fare le cose sbagliate

    Mi sa che il problema sta proprio nella impostazione del DB
    postaci lo script delle 3 tabelle interesate con le relative relazioni
    e magari eliminando i campi insignificanti

    Cosi potremo spremere il cervellino

  5. #5

  6. #6
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Ringrazio entrambi, ora sono da un cliente, posterò la struttura di queste tabelle
    (cosa non facilissima perchè sono superincasinate).

    Mettere temporaneamente a NULL un campo, per poi cancellare le righe, era la risposta che avevo trovato con google,
    ma è un ... ehm... casini porco, perchè le tabelle coinvolte sono una decina tutte collegate tra di loro nei modi più incredibili (almeno per un niubbone come me).
    Questo significa in pratica che devo scrivere un programma piuttosto complicato che, partendo dalla tabella "madre", fa un elenco di tutte le righe delle tabelle figlie (una decina), imposta a NULL tutte le varie FK (che non conosco, e ci metterò un secolo per trovarle tutte, stiamo parlando di centinaia complessivamente), per poi cancellarle...

    Il "malefico" riferito a MSSQL è specifico di un problema di RESTORE, nel senso che spesso non me lo fa fare
    (ovviamente paciugo-paciugo... piallo... restore... ripresa a paciugare...).
    In questi casi come trucchetto faccio un "bring offline" e poi "bring online", che quasi sempre funziona.

    Tutte robe stranissime, per me, conosco solo un poco mysql e lì le FK non esistono () e quando fai il restore... lo fa sempre e comunque se ne frega

    nzomma... un piantooooooo

    Detto tutto questo non conoscevo il "trucchetto" della transazione, provo quella che mi sembra quella meno difficile, ammesso di riuscire a farla andare.

  7. #7
    ma - a parte lo sfogo su mssql - cos'è che devi fare esattamente? svuotare un db?

  8. #8
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da optime Visualizza il messaggio
    ma - a parte lo sfogo su mssql - cos'è che devi fare esattamente? svuotare un db?
    Devo eliminare i vecchi dati (precedenti agli ultimi 5 anni) che sono il limite per gli accertamenti fiscali.
    In pratica una volta archiviato il vecchio backup con "tutto" (non si sa mai), alleggerire il db tenendo il materiale dal 2009 a oggi

  9. #9
    non ti conviene sentire chi ha fatto il gestionale? magari esiste una funzione apposita che cancella da... a...

  10. #10
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da optime Visualizza il messaggio
    non ti conviene sentire chi ha fatto il gestionale? magari esiste una funzione apposita che cancella da... a...
    Sarebbe la soluzione migliore... se fosse fattibile

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.