script permission information_schema esquema drop create consultar sql sql-server database sql-server-2008 schema

sql - permission - ¿Cómo cambio el esquema db a dbo?



information_schema sql server (10)

Importé un conjunto de tablas de un antiguo servidor sql (2000) en mi base de datos de 2008. Todas las tablas importadas tienen un prefijo con mi nombre de usuario, por ejemplo: jonathan.MovieData . En las properties la tabla, enumera jonathan como el esquema db. Cuando escribo procedimientos almacenados, ahora debo incluir a jonathan. frente a todos los nombres de la tabla que es confuso.

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

Resultado actual: jonathan.MovieData

Resultado deseado: dbo.MovieData


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

que hacer clic en ejecutar, revertirá todos los esquemas de propiedad 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]


Acabo de publicar esto en una pregunta similar: en SQL Server 2005, ¿cómo cambio el "esquema" de una tabla sin perder ningún dato?

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

Agregué un ejecutivo para tener este código auto-ejecutado, y agregué una unión en la parte superior para poder cambiar el esquema de ambas tablas Y 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 hacer que las transferencias de datos del estudio de gestión de Sql Server o del estudio visual alteraran el esquema de destino ... terminé simplemente ejecutando esto contra el restaurado volcar en el nuevo servidor para obtener las cosas como yo quería.


Manera de hacerlo por una cosa individual:

alterar esquema transferencia dbo jonathan.MovieData



Puede ejecutar lo siguiente, que generará un conjunto de sentencias 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 declaraciones en el analizador de consultas.

Aquí hay un script más antiguo que también lo hará por usted, creo que al cambiar el propietario del objeto. No lo he probado en 2008, sin embargo.

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 procesos almacenados si es necesario.


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;


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

ALTER SCHEMA nombre_esquema TRANSFERENCIA nombre_segurable


Mover la 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


ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

Vea ALTERAR ESQUEMA .

Sintaxis generalizada:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;


USE MyDB; GO ALTER SCHEMA dbo TRANSFER jonathan.MovieData; GO

Ref: ALTER SCHEMA