Ciao ragazzi
Ho la necessità di creare uno script di sql che elimini in automatico tutte le relazioni, i vincoli e le chiavi delle tabelle di un dato database.
Questo perchè ho poi la necessità di effettuare delle modifiche alle colonne di alcune tabelle.
Lo so, sarebbe più facile farlo a mano, ma purtroppo devo creare un tool di manutenzione dei database e quindi necessito di procedure.
Al momento ho scritto questo:
Ho in particolare 2 problemi.codice:USE 'Sitt2_Sud_ConfigurationDB' -- creare array con elenco tabelle -- creare array con elenco indice tabella -- cancellare ogni elemento del precedente array -- creo l'array e lo riempio con i nomi delle tabelle DECLARE @table_name VARCHAR(50) = '' DECLARE @index_name VARCHAR(255) = '' DECLARE table_cursor CURSOR LOCAL FAST_FORWARD FOR --legge i nomi delle tabelle SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_TYPE not like 'view%') AND (TABLE_NAME NOT IN(select TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES))FOR READ ONLY OPEN table_cursor FETCH table_cursor INTO @table_name WHILE (@@fetch_status <> -1) BEGIN -- creo ed eseguo il ciclo sugli indici DECLARE index_cursor CURSOR FOR EXEC sp_helpindex '@table_name' OPEN index_cursor FETCH table_cursor INTO @index_name WHILE (@@fetch_status <> -1) BEGIN DROP INDEX @table_name.@index_name END -- mi sposto sulla tabella successiva FETCH table_cursor INTO @table_name CLOSE index_cursor DEALLOCATE index_cursor END CLOSE table_cursor DEALLOCATE table_cursor
Effettuo una select per caricare un cursore contenente l'elenco di tutte le tabelle presenti nel database.
Avvio il ciclo su questo cursore e ad ogni giro carico un nuovo cursore contenente l'elenco degli indici relativi alla suddetta tabella.
- Primo problema: l'istruzione che utilizzo per leggere l'elenco degli indici è: sp_helpindex '@table_name' (in rosso nel codice postato)
Il problema è che ovviamente non è possibile eseguire una stored procedure così come l'ho scritta io; anzi, non so nemmeno se sia possibile farlo all'interno di un ciclo.
Qualora però sbagliassi non conosco la sintassi, quindi la mia prima domanda è: esiste una sintassi corretta x eseguire questa istruzione o un'altra istruzione equivalente?
- Secondo problema che mi si pone è l'eliminazione dell'indice trovato.
L'istruzione che utilizzo è la DROP INDEX alla quale passo le variabili contenenti il nome della tabella e il nome dell'indice: DROP INDEX @table_name.@index_name (in rosso nel codice postato).
Chiaramente non funziona, e non so perchè. Anche qui, sbaglio a scrivere qualcosa o il problema è altrove?
Grazie a tutti
lady![]()



Rispondi quotando