ZMIANY SCHEMATU (Transact-SQL)

Przesyła zabezpieczany między schematów.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
    Object | Type | XML Schema Collection
    }

Argumenty

  • schema_name
    Jest to nazwa schematu w bieżącej bazie danych, do którego zabezpieczany zostaną przeniesione.Cannot be SYS or INFORMATION_SCHEMA.

  • <entity_type>
    Jest to klasa obiekt , dla którego właściciel został zmieniony.Obiekt jest ustawieniem domyślnym.

  • securable_name
    Jest częścią jednego lub dwóch części nazwy schematu zawarte zabezpieczany ma zostać przeniesiona do schematu.

Uwagi

Użytkownicy i schematy są całkowicie oddzielne.Aby uzyskać więcej informacji, zobacz Oddzielanie schematu użytkownika.

ZMIANY SCHEMATU tylko można przenieść securables między schematów w tej samej bazy danych.Aby zmienić lub usunąć zabezpieczany w ramach schematu, użyć ALTER lub UPUSZCZANIA instrukcja specyficznych dla tego zabezpieczany.

Jeśli nazwa część z nich jest używana dla securable_name, reguły rozpoznawania nazw aktualnie obowiązujących będą używane do lokalizowania zabezpieczany.

Wszystkie uprawnienia związane z zabezpieczany zostanie usunięty, gdy zabezpieczany są przenoszone do nowego schematu.Jeśli właściciel zabezpieczany została jawnie zestaw, właściciel pozostaną niezmienione.Jeśli właściciel zabezpieczany została zestaw na właściciela SCHEMATU, właściciel pozostanie właściciela SCHEMATU; Jednak po przeniesieniu, który rozwiąże właściciela SCHEMATU do właściciela nowego schematu.principal_id Nowego właściciela jest NULL.

Aby zmienić schemat tabela lub widoku za pomocą SQL Server Management Studio, w Eksploratorze obiektów, kliknij prawym przyciskiem myszy tabela lub widok, a następnie kliknij przycisk Projekt.Naciśnij klawisz F4 , aby otworzyć okno właściwości.W schematu wybierz nowy schemat.

PrzestrogaPrzestroga

Począwszy od programu SQL Server 2005 zachowanie schematów zostało zmienione. Z tego powodu kod źródłowy, który traktuje schematy jak odpowiedniki użytkowników baz danych, może przestać zwracać poprawne wyniki. Starych widoków wykazu, w tym sysobjects, nie należy używać w bazie danych, w której są używane następujące instrukcje DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. W takich bazach danych należy używać nowych widoków wykazu. W nowych widokach wykazu uwzględniono rozdział podmiotów i schematów, który został wprowadzony w programie SQL Server 2005. Aby uzyskać więcej informacji dotyczących widoków wykazu, zobacz temat Widoki wykazu (Transact-SQL).

Uprawnienia

Aby przetransferować zabezpieczany z innego schematu, bieżącego użytkownika musi mieć uprawnienie Kontrola zabezpieczany (nie schemat) i zmienić uprawnienia dla miejsce docelowe schematu.

Jeśli zabezpieczany ma specyfikację wykonanie jako właściciela na nich właściciela zestaw do właściciela SCHEMATU, użytkownik również musi mieć uprawnienie do PERSONIFIKACJI na właściciela schematu miejsce docelowe .

Wszystkie uprawnienia związane z zabezpieczany transferowanych są usuwane, gdy jest przenoszony.

Przykłady

A.Transferowanie własności tabela

Poniższy przykład modyfikuje schematu HumanResources przez przeniesienie tabela Address ze schematu Person do schematu.

USE AdventureWorks2008R2;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

B.Transferowanie własności typu

Poniższy przykład tworzy typ w Production schematu, a następnie przesyła typu do Person schematu.

USE AdventureWorks2008R2;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO