Ho una tabella che è entrata nello schema "db_owner" e ne ho bisogno nello schema "dbo".
C'è uno script o un comando da eseguire per cambiarlo?
In SQL Server Management Studio:
ALTER SCHEMA [NewSchema] TRANSFER [OldSchema].[Table1]
Mostra tutto TABLE_SCHEMA
con questa selezione:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
È possibile utilizzare questa query per modificare tutto lo schema di tutte le tabelle in dbo schema tabella:
DECLARE cursore CURSOR FOR
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA <> 'dbo'
DECLARE @schema sysname,
@tab sysname,
@sql varchar(500)
OPEN cursore
FETCH NEXT FROM cursore INTO @schema, @tab
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER SCHEMA dbo TRANSFER ' + @schema + '.' + @tab
PRINT @sql
FETCH NEXT FROM cursore INTO @schema, @tab
END
CLOSE cursore
DEALLOCATE cursore
risposta semplice
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
non è necessario interrompere tutte le connessioni al database, questo può essere fatto al volo.
A lieve miglioramento alla risposta eccellente di sAeid ...
Ho aggiunto un exec per far eseguire automaticamente questo codice, e ho aggiunto un'unione in alto in modo da poter cambiare lo schema di entrambe le tabelle E le procedure memorizzate:
DECLARE cursore CURSOR FOR
select specific_schema as 'schema', specific_name AS 'name'
FROM INFORMATION_SCHEMA.routines
WHERE specific_schema <> 'dbo'
UNION ALL
SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA <> 'dbo'
DECLARE @schema sysname,
@tab sysname,
@sql varchar(500)
OPEN cursore
FETCH NEXT FROM cursore INTO @schema, @tab
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']'
PRINT @sql
exec (@sql)
FETCH NEXT FROM cursore INTO @schema, @tab
END
CLOSE cursore
DEALLOCATE cursore
Anch'io ho dovuto ripristinare un dbdump, e ho scoperto che lo schema non era dbo - ho passato ore a cercare di ottenere lo studio di gestione di SQL Server o i trasferimenti di dati di Visual Studio per modificare lo schema di destinazione ... Ho finito per eseguire questo contro il ripristino scaricare sul nuovo server per ottenere le cose come volevo.
Quando utilizzo SQL Management Studio non ottengo l'opzione "Modifica", ma solo "Progettazione" o "Modifica". Se hai Visual Studio (ho verificato VS.NET 2003, 2005 e 2008) puoi utilizzare Esplora server per modificare lo schema. Fare clic con il tasto destro del mouse sulla tabella e selezionare 'Design Table' (2008) o 'Open Table Definition' (2003, 2005). Evidenzia la colonna "Nome colonna" completa. È quindi possibile fare clic con il pulsante destro del mouse e selezionare "Pagine delle proprietà" o Proprietà (2008). Dalla finestra delle proprietà dovresti vedere il "Proprietario" (2003 e 2005) o "Schema" (2008) con un elenco a discesa per possibili schemi.
Lo uso per situazioni in cui un gruppo di tabelle deve trovarsi in uno schema diverso, in questo caso lo schema dbo.
declare @sql varchar(8000)
;
select
@sql = coalesce( @sql, ';', '') + 'alter schema dbo transfer [' + s.name + '].[' + t.name + '];'
from
sys.tables t
inner join
sys.schemas s on t.[schema_id] = s.[schema_id]
where
s.name <> 'dbo'
;
exec( @sql )
;