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
10 answers
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
Patrz zmiana schematu .
Składnia Uogólniona:
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/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.
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
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
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.
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
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
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;
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
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]
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