Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile eliminare lo schema , perché non esiste o non si dispone dell'autorizzazione. - Esercitazione su SQL Server / TSQL Parte 29

Scenario:

Lavori per Mortgage Company come sviluppatore di SQL Server. Hai questo requisito per preparare lo script SQL per eliminare lo schema. Utilizzi
Drop Schema SchemeName
dichiarazione nello sviluppo dell'istanza di SQL Server e ottieni l'errore sotto.

Impossibile eliminare lo schema '', perché non esiste o non disponi dell'autorizzazione.

Quali sarebbero i tuoi prossimi passi?

Soluzione:

Potrebbero esserci un paio di ragioni per l'errore di cui sopra. Uno, non hai davvero il permesso di eliminare lo schema. Hai controllato con DBA e lui ha confermato che hai tutte le autorizzazioni per accettare questa modifica. Ora lo hai esaminato ulteriormente e hai notato che ci sono oggetti come tabelle, viste ecc. che utilizzano questo schema.
Da qui puoi proporre due soluzioni.
1) Elimina tutti gli oggetti Relativo a Schema e quindi Elimina lo schema (Potrebbero esserci scenari in cui qualcuno stava usando questo schema e oggetti. Ora nessuno ha più bisogno di usare lo schema e gli oggetti ad esso correlati. Quindi discuterai con il tuo team e se dicono che prepari lo script di rilascio per oggetti e schema. Tu può utilizzare le finestre Dettagli di Esplora oggetti per generare script di trascinamento di oggetti.
2) Si desidera mantenere gli oggetti e spostarli in uno schema diverso. Forse dbo o qualsiasi nuovo schema. Dopo il trasferimento gli oggetti, si desidera eliminare lo schema.
Di seguito è possibile utilizzare la query per generare uno script per il trasferimento di oggetti.
Declare @SourceSchema VARCHAR(100)
Declare @DestinationSchema VARCHAR(100)
SET @SourceSchema='TB'
SET @DestinationSchema='dbo'
Select 'Alter Schema ['+@DestinationSchema+'] Transfer '+@SourceSchema+'.['+name+']' 
from sys.objects
where schema_name(schema_id)=@SourceSchema
 
 
 Copia gli script generati e quindi esegui in un database. Una volta terminato, ora puoi eliminare lo schema utilizzando Drop Schema SchemaName Dichiarazione.