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
10 answers
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
Ver ALTER SCHEMA.
Sintaxis generalizada:
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
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.
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
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
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.
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
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
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;
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
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]
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