Cómo puedo cambiar el esquema de base de datos a dbo


He importado un montón de tablas de un antiguo sql server (2000) a mi base de datos de 2008. Todas las tablas importadas llevan el prefijo mi nombre de usuario, por ejemplo: jonathan.MovieData. En la tabla properties enumera jonathan como el esquema db. Cuando escribo procedimientos almacenados ahora tengo que incluir jonathan. delante de todos los nombres de tabla, lo que es confuso.

¿Cómo cambio todas mis tablas para ser dbo en lugar de jonathan?

Resultado Actual: jonathan.MovieData

Resultado Deseado: dbo.MovieData

Author: Owen Blacker, 2009-07-18

10 answers

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

Ver ALTER SCHEMA.

Sintaxis generalizada:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
 168
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-09 10:24:29

Puede ejecutar lo siguiente, lo que generará un conjunto de instrucciones ALTER sCHEMA para todos sus talbes:

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'

Luego debe copiar y ejecutar las instrucciones en query analyzer.

Aquí hay un script más antiguo que también lo hará por ti, creo que cambiando el propietario del objeto. Aunque no lo he probado en 2008.

DECLARE @old sysname, @new sysname, @sql varchar(1000)

SELECT
  @old = 'jonathan'
  , @new = 'dbo'
  , @sql = '
  IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
  WHERE
      QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
      AND TABLE_SCHEMA = ''' + @old + '''
  )
  EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''

EXECUTE sp_MSforeachtable @sql

Lo obtuve de este sitio.

También habla de hacer lo mismo para los procs almacenados si es necesario.

 38
Author: patmortech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-18 03:52:13
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO

Ref: ALTER SCHEMA

 20
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-18 03:30:25

Mover tabla del esquema dbo a MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


Mover la tabla de MySchema al esquema dbo:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable
 12
Author: Neru-J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-08 09:29:17

Acabo de publicar esto en una pregunta similar: En sql server 2005, ¿cómo puedo cambiar el "esquema" de una tabla sin perder ningún dato?


Una ligera mejora de la excelente respuesta de sAeid...

He añadido un exec para que este código se ejecute automáticamente, y he añadido una unión en la parte superior para que pueda cambiar el esquema tanto de las tablas como de los procedimientos almacenados:

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

Yo también tuve que restaurar un dbdump, y encontré que el esquema no era dbo-Pasé horas tratando de obtenga transferencias de datos de Sql Server management studio o Visual studio para modificar el esquema de destino... Terminé simplemente ejecutando esto contra el volcado restaurado en el nuevo servidor para obtener las cosas de la manera que quería.

 8
Author: Lanceomagnifico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:19

Puede cambiar por lotes esquemas de múltiples objetos de base de datos como se describe en esta publicación:

Cómo cambiar el esquema de todas las tablas, vistas y procedimientos almacenados en MSSQL

 5
Author: anar khalilov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:39

Forma de hacerlo para una cosa individual:

Alter schema dbo transfer jonathan.MovieData

 2
Author: Jon Onstott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-18 03:56:03

Tuve un problema similar pero mi esquema tenía una barra invertida. En este caso, incluya los corchetes alrededor del esquema.

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;
 2
Author: Hannover Fist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-29 18:21:40

Ms-help://MS.SQLCC.v9 / SRA. SQLSVR.v9.es/tsqlref9/html / 0a760138-460e-410a-a3c1-d60af03bf2ed.htm

ALTER SCHEMA schema_name TRANSFER securable_name

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-18 03:30:10

Abra SQL server como cuenta SA y haga clic en nueva consulta después de las consultas blow

Después de hacer clic en ejecutar, se revertirá todo el esquema de propiedad de nuevo a la cuenta SA

alter authorization on schema::[db_datareader] to [dbo]
alter authorization on schema::[db_datareader] to [db_datareader]
alter authorization on schema::[db_datawriter] to [dbo]
alter authorization on schema::[db_datawriter] to [db_datawriter]
alter authorization on schema::[db_securityadmin] to [dbo]
alter authorization on schema::[db_securityadmin] to [db_securityadmin]
alter authorization on schema::[db_accessadmin] to [dbo]
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
alter authorization on schema::[db_backupoperator] to [dbo]
alter authorization on schema::[db_backupoperator] to [db_backupoperator]
alter authorization on schema::[db_ddladmin] to [dbo]
alter authorization on schema::[db_ddladmin] to [db_ddladmin]
alter authorization on schema::[db_owner] to [dbo]
alter authorization on schema::[db_owner] to [db_owner]
 1
Author: Mehdi Jalal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-28 13:10:30