SQL Server 2005 - Istruzione SQL per rimuovere le chiavi raggruppate dalle tabelle in base a una query sui nomi di tabulazione?

StackOverflow https://stackoverflow.com/questions/1222432

Domanda

Sto provando a ripristinare un backup di un database Microsoft Dynamics NAV, che sfortunatamente fallisce mentre tenta di impostare un CLUSTERED KEY per le tabelle che hanno già le chiavi in ??cluster.

In NAV, ogni azienda nel database ottiene la propria copia delle tabelle, preceduta dal nome dell'azienda, ad es. AZIENDA $ User_Setup . Vorrei quindi rimuovere qualsiasi chiave cluster di una determinata azienda, il che significa che su qualsiasi tabella il cui nome inizia con "Azienda $".

Qualcuno ha un'istruzione SQL in grado di eseguire ciò?

Grazie in anticipo!

Cordiali saluti, Martin

È stato utile?

Soluzione

Dovrai farlo come un cursore. Supponendo che ogni vincolo PK sia denominato in modo coerente e sia basato sul nome della tabella, si sarebbe in grado di fare qualcosa del genere (non testato, quindi potrebbe contenere errori di battitura o errori di sintassi vauge):

DECLARE mycursor CURSOR FOR SELECT name FROM sysobjects WHERE name LIKE 'Company$%'

OPEN CURSOR
FETCH NEXT FROM mycursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = N'ALTER TABLE QUOTENAME(' + @tablename + ') DROP CONSTRAINT PK_' + @tablename 
    EXEC sp_ExecuteSQL @sql
    FETCH NEXT FROM mycursor INTO @tablename
END

CLOSE CURSOR
DEALLOCATE CURSOR

Se i tuoi PK non hanno un nome basato su tablename, allora dovrai modificarlo per eseguire una query anche su sysconstraints o sysindexes per ottenere il nome PK effettivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top