Как изменить схему db на dbo

я импортировал кучу таблиц из старого sql server (2000) в мою базу данных 2008. Все импортированные таблицы имеют префикс с моим именем пользователя, например:jonathan.MovieData. В таблице properties перечисляет jonathan Как схемы БД. Когда я пишу хранимые процедуры, я теперь должен включать jonathan. перед всеми именами таблиц, которые сбивают с толку.

как изменить все мои таблицы, чтобы быть dbo вместо Джонатана?

результат: jonathan.MovieData

желаемому результату: dbo.MovieData

10 ответов


ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

посмотреть ИЗМЕНИТЬ СХЕМУ.

Обобщенный Синтаксис:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 

вы можете запустить следующее, которое создаст набор операторов ALTER sCHEMA для всех ваших talbes:

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

затем необходимо скопировать и запустить операторы в query analyzer.

вот более старый скрипт, который сделает это и для вас, я думаю, изменив владельца объекта. Не пробовал его на 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

получил от этот сайт.

Он также говорит о том, чтобы сделать то же самое для сохраненных процессов, если вам нужно к.


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

Ref:ИЗМЕНИТЬ СХЕМУ


переместить таблицу из схемы dbo в MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


переместить таблицу из MySchema в схему dbo:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable

Я только что опубликовал это на аналогичный вопрос:в sql server 2005, Как изменить "схему" таблицы без потери данных?


на небольшое улучшение отличного ответа Саида...

Я добавил exec, чтобы этот код выполнялся самостоятельно, и я добавил объединение вверху, чтобы я мог изменить схему обеих таблиц и хранимых процедур:

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

Мне тоже пришлось восстановить dbdump и обнаружил, что схема не dbo-я потратил часы, пытаясь получить передачу данных SQL Server management studio или visual studio для изменения схемы назначения... Я закончил тем, что просто запустил это против восстановленного дампа на новом сервере, чтобы получить все так, как я хотел.


вы можете пакетного изменения схемы нескольких объектов базы данных, как описано в этом посте:

как изменить схему всех таблиц, представлений и хранимых процедур в MSSQL


способ сделать это для отдельной вещи:

alter schema dbo transfer jonathan.MovieData


У меня была аналогичная проблема, но в моей схеме была обратная косая черта. В этом случае заключите схему в квадратные скобки.

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;

ms-help: / / MS. SQLCC.SQLSVR В9/г-жа.В9.ванная/tsqlref9/HTML-код/0a760138-460e-410а-a3c1-d60af03bf2ed.НТМ

ALTER SCHEMA schema_name TRANSFER securable_name


откройте SQL server как учетную запись SA и нажмите на новый запрос мимо запросов blow

чем нажмите на execute, он откатит всю принадлежащую схему обратно в учетную запись 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]