Как изменить схему БД на 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'затем необходимо скопировать и запустить инструкции в анализаторе запросов.
вот старый скрипт, который сделает это и для вас, я думаю, изменив владельца объекта. Не пробовал его на 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; GORef: ИЗМЕНИТЬ СХЕМУ
переместить таблицу из схемы dbo в MySchema:
ALTER SCHEMA MySchema TRANSFER dbo.MyTable
переместить таблицу из MySchema в схему dbo:ALTER SCHEMA dbo TRANSFER MySchema.MyTable
Я только что отправил это на аналогичный вопрос:в sql server 2005, Как изменить "схему" таблицы без потери каких-либо данных?
A небольшое улучшение к превосходному ответу Саида...
Я добавил 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 [DOMAIN\jonathan].MovieData;
ms-help: / / MS. SQLCC.SQLSVR В9/г-жа.v9.en/tsqlref9/html / 0a760138-460e-410a-a3c1-d60af03bf2ed.htm
изменить схему schema_name передача securable_name
откройте SQL server как учетную запись SA и нажмите на новый запрос мимо blow queries
чем нажать на 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]
Comments