Jak zmienić schemat db na dbo

Zaimportowałem kilka tabel ze starego serwera sql (2000) do mojej bazy danych z 2008 roku. Wszystkie zaimportowane tabele są poprzedzone nazwą użytkownika, na przykład: jonathan.MovieData. W tabeli properties wymienia jonathan jako schemat db. Kiedy piszę procedury składowane, muszę teraz umieścić jonathan. przed wszystkimi nazwami tabel, co jest mylące.

Jak zmienić wszystkie moje tabele na dbo zamiast Jonathana?

Current result: jonathan.MovieData

Pożądany rezultat: dbo.MovieData

Author: Owen Blacker, 2009-07-18

10 answers

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

Patrz zmiana schematu .

Składnia Uogólniona:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 10:24:29

Możesz uruchomić następujące polecenie, które wygeneruje zestaw instrukcji ALTER sCHEMA dla wszystkich Twoich talbes:

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

Następnie należy skopiować i uruchomić instrukcje w analizatorze zapytań.

Oto starszy skrypt, który zrobi to również za ciebie, myślę, że zmieniając właściciela obiektu. Nie próbowałem tego w 2008 roku.

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

Dostałem to z tej strony.

Mówi również o zrobieniu tego samego dla przechowywanych proc, jeśli zajdzie taka potrzeba.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-18 03:30:25

Przenieś tabelę ze schematu dbo do MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


Przenieś tabelę ze schematu MySchema do schematu 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-08 09:29:17

Właśnie wysłałem to na podobne pytanie: w sql server 2005, Jak zmienić "schemat" tabeli bez utraty danych?


A nieznaczna poprawa doskonałej odpowiedzi saeida...

Dodałem exec, aby ten kod był wykonywany samodzielnie, i dodałem Unię na górze, aby móc zmienić schemat zarówno tabel, jak i procedur składowanych:

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

Ja też musiałem przywrócić dbdump i okazało się, że schemat nie był dbo-spędziłem godziny próbując uzyskaj transfer danych SQL Server management studio lub visual studio, aby zmienić schemat docelowy... Skończyło się na tym, że porównałem to z przywróconym zrzutem na nowym serwerze, aby wszystko było tak, jak chciałem.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:19

Można wsadowo zmieniać Schematy wielu obiektów bazy danych, jak opisano w tym poście:

Jak zmienić schemat wszystkich tabel, widoków i procedur składowanych w 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:39

Sposób na indywidualną rzecz:

Alter schema dbo transferMovieData

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-18 03:56:03

Miałem podobny problem, ale mój schemat miał odwrotny ukośnik. W takim przypadku należy umieścić nawiasy wokół schematu.

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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-29 18:21:40

Ms-help: / / MS. SQLCC.v9 / MS. SQLSVR.v9.PL / 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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-18 03:30:10

Otwórz SQL server jako konto SA i kliknij na nowe zapytanie obok zapytań blow

Po kliknięciu na wykonaj, spowoduje to cofnięcie wszystkich posiadanych schematów z powrotem na konto 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 13:10:30