PDA

Visualizza la versione completa : Cancellare ID da qualsiasi campo


BSOD
06-11-2007, 15:53
Ciao,
vorrei sapere se esiste una qualche query per fare l'update solo su di un range di campi accomunati soltanto dal fatto che il loro nome inizia per "ID_".

In pratica ho una tabella con diversi campi contenenti i valori delle chiavi primarie di altre tabelle.

TABELLA_DISNEY
----------------
campo: campo_1
campo: campo_2
campo: campo_3
campo: id_pippo
campo: id_pluto
campo: id_paperino
campo: id_...
campo: id_...
campo: id_...
campo: id_nonnaPapera

Ovviamente uso quegli id per relazionare la tabella Disney a svariate tabelline 'figlio'.

Se cancello un record da una tabella 'figlio' vorrei che, come consuetudine, l'ID del record che ho cancellato sparisse da qualsiasi campo della tabella TABELLA_DISNEY a prescindere da quale sia il campo che la contenga ma a patto che il campo sia uno di quelli contenenti gli ID che servono per le relazioni e non uno degli altri che potrebbero, invece, avere quello stesso valore ma con altri significati.

Avrei bisogno di una sorta di:
"UPDATE TABELLA_DISNEY SET = null WHERE [ID*] = " & ID

Per ora faccio come ho sempre fatto, lancio una query per ogni campo:
"UPDATE TABELLA_DISNEY SET ID_Pippo = null WHERE ID_Pippo = " & ID
....
"UPDATE TABELLA_DISNEY SET ID_nonnaPapera = null WHERE ID_nonnaPapera = " & ID

In questo caso però i campi coinvolti sono parecchi e il codice che uso per fare questa operazione risulta lunghetto e parecchio 'bruttino' a vedersi :(

Posso farci qualcosa?

FiOrEbAt
06-11-2007, 17:07
si possono fare delle query per vedere l'elenco dei campi.. ma è un casino... hai sbagliato approccio

BSOD
06-11-2007, 17:21
Originariamente inviato da FiOrEbAt
si possono fare delle query per vedere l'elenco dei campi.. ma è un casino... hai sbagliato approccio

eh, purtroppo sono parecchio rospo sulle query complesse ...sono autodidatta.

Dici che ho sbagliato approccio ma così m'incuriosisci... tu come avresti messo in relazione una decina di tabelline child ad una tabella parent?

E' lì che ho sbagliato? ...se mi dai una dritta magari faccio in tempo a cambiare un po' di cose prima di rilasciare l'applicazione.

La situazione non è delle più rosee:
http://www.experiments.it/relations.gif
...ma ho quasi finito lo sviluppo e ho tempo di ottimizzare/stravolgere qualche parte, se ne valesse la pena mi piacerebbe farlo.

FiOrEbAt
07-11-2007, 10:19
SELECT c.name, o.name
FROM syscolumns c
inner join sysobjects o on o.id = c.id

Sgro
07-11-2007, 11:03
Certo che si può. Se stai usando Sql Server basta che fai:

UPDATE [Tabella] SET [Campo] = @Valore WHERE SUBSTRING([Campo],1,3) = "ID_"

Ciao

BSOD
07-11-2007, 12:06
Originariamente inviato da FiOrEbAt
SELECT c.name, o.name
FROM syscolumns c
inner join sysobjects o on o.id = c.id
Sì, bhè ...in effetti così la query è leggerissimamente più elegante di come l'ho scritta io :jam: d'oh! :)


Originariamente inviato da Sgro
Certo che si può. Se stai usando Sql Server basta che fai:

UPDATE [Tabella] SET [Campo] = @Valore WHERE SUBSTRING([Campo],1,3) = "ID_"

Ciao

Purtroppo per questo progetto uso Access, voi, comunque , siete troppo avanti! :unz:

Grazie delle dritte, anche se non riuscissi ad applicarle a questo progetto sono comunque informazioni che mi sono utilissime!

BSOD
07-11-2007, 12:46
A preposito di Sql e della query di Sgro...

Originariamente inviato da Sgro
UPDATE [Tabella] SET [Campo] = @Valore WHERE SUBSTRING([Campo],1,3) = "ID_"


Scusa, ero fuso e mi son 'capito' male ...in realtà quella query cerca per un valore di campo che inizia con "ID_" ...ma è proprio il nome del campo che devo rendere dinamico, non il suo valore.

roba tipo:
"UPDATE [Tabella] Set [ID_(restoDelNomeDelCampo)] = @NuovoValore WHERE [ID_(restoDelNomeDelCampo)] = @Valore"

Questo perchè ho un range di campi coi nomi che iniziano tutti per ID_ e vorrei aggiornarli tutti in un colpo solo senza dover lanciare una query per campo come in questo esempio:
Update Tabella set ID_x = @NuovoValore Where ID_x = @Valore"
Update Tabella set ID_y = @NuovoValore Where ID_y = @Valore"
Update Tabella set ID_z = @NuovoValore Where ID_z = @Valore"

Pardon per la confusione

FiOrEbAt
07-11-2007, 13:00
Originariamente inviato da BSOD
Sì, bhè ...in effetti così la query è leggerissimamente più elegante di come l'ho scritta io :jam: d'oh! :)
ma ti funziona in access?!?


Purtroppo per questo progetto uso Access, voi, comunque , siete troppo avanti! :unz:
SQL Express è gratis :mame:

Credo che tu debba fare una StoreProcedure (se esitono in access ^^) o devi farlo dal programma!

BSOD
07-11-2007, 13:32
Originariamente inviato da FiOrEbAt
ma ti funziona in access?!?
SQL Express è gratis :mame:

Credo che tu debba fare una StoreProcedure (se esitono in access ^^) o devi farlo dal programma!

- In Access non l'ho provata perchè oggi ho il capo che mi fiata sul collo per un'altra esigenza urgente e non ho tempo di sperimentare.
Comunque appena posso la provo e ti aggiorno sul risultato, anche se mi sembra di intuire che già sai che non può funzionare

- Sql lo 'stimo' moltissimo :) e lo uso quando posso scegliere ma questo è un progetto in Access e me lo devo tenere così com'è :(

- Che io sappia non si possono fare le storedProcedure in Access ...però so che esistono dei work-around tipo questo: http://www.codeproject.com/dotnet/ELAB.asp ...che non ho ancora letto bene.

Ora mi informo, grazie!

Loading