Udostępnij za pośrednictwem


ALTER SCHEMA (Transact-SQL)

Dotyczy:programu SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft Fabric

Transferuje zabezpieczane między schematami.

Transact-SQL konwencje składni

Składnia

-- Syntax for SQL Server and Azure SQL Database  

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

<entity_type> ::=  
    {  
    Object | Type | XML Schema Collection  
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric

ALTER SCHEMA schema_name   
   TRANSFER [ OBJECT :: ] securable_name   
[;]  

Argumenty (w programowaniu)

schema_name

Schemat docelowy w bieżącej bazie danych. Zabezpieczanie jest przenoszone do tego schematu. Nie można mieć SYS ani INFORMATION_SCHEMA.

<entity_type>

Klasa jednostki, dla której jest zmieniany właściciel. Obiekt jest domyślny.

securable_name

Jednoczęściowa lub dwuczęściowa nazwa zabezpieczanego zakresu schematu, która ma zostać przeniesiona do schematu.

Uwagi

Użytkownicy i schematy są całkowicie oddzielone. Schematy nie są równoważne użytkownikom bazy danych. Użyj widoków wykazu systemu , aby zidentyfikować wszelkie różnice między użytkownikami bazy danych i schematami.

Alter SCHEMA może służyć tylko do przenoszenia zabezpieczania między schematami w tej samej bazie danych. Aby zmienić lub usunąć zabezpieczanie w schemacie, użyj instrukcji ALTER lub DROP specyficznej dla tego zabezpieczanego.

Jeśli jednoczęściowa nazwa jest używana dla securable_name, obowiązujące obecnie reguły rozpoznawania nazw będą używane do lokalizowania zabezpieczanego.

Wszystkie uprawnienia skojarzone z zabezpieczanym elementem są porzucane, gdy zabezpieczany zostanie przeniesiony do nowego schematu. Jeśli właściciel zabezpieczanego obiektu został jawnie ustawiony, właściciel pozostaje niezmieniony. Jeśli właściciel zabezpieczanego obiektu został ustawiony na WARTOŚĆ WŁAŚCICIEL SCHEMATU, właściciel pozostanie WŁAŚCICIELEM SCHEMATU; jednak po przeniesieniu SCHEMA OWNER zostanie rozpoznany jako właściciel nowego schematu. Nowy principal_id właściciel będzie mieć wartość NULL.

Ważne

Jeśli używasz ALTER SCHEMA metody do transferu procedury składowanej, funkcji, widoku lub wyzwalacza do innego schematu, nie zmieni nazwy schematu, jeśli istnieje, obiektu w definition kolumnie widoku katalogu sys.sql_modules lub w wyniku OBJECT_DEFINITION wbudowanej funkcji. ALTER SCHEMA W związku z tym nie należy używać do przenoszenia tych typów obiektów. Zamiast tego upuść i ponownie utwórz obiekt w nowym schemacie.

Przeniesienie obiektu, takiego jak tabela lub synonim, nie spowoduje automatycznej aktualizacji odwołań do tego obiektu. Należy ręcznie zmodyfikować wszystkie obiekty odwołujące się do przeniesionego obiektu. Jeśli na przykład przeniesiesz tabelę i ta tabela zostanie odwołana w wyzwalaczu, musisz zmodyfikować wyzwalacz, aby odzwierciedlić nową nazwę schematu. Użyj sys.sql_expression_dependencies , aby wyświetlić listę zależności od obiektu przed przeniesieniem go.

Aby zmienić schemat tabeli przy użyciu programu SQL Server Management Studio, w Eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę, a następnie wybierz pozycję Projekt. Naciśnij F4 , aby otworzyć okno Właściwości. W polu Schemat wybierz nowy schemat.

ALTER SCHEMA używa blokady na poziomie schematu.

Ostrzeżenie

W punkcie końcowym analizy SQL sieci szkieletowej przesyłanie tabeli między schematami za pośrednictwem języka T-SQL nie jest obsługiwane. Może to negatywnie wpłynąć na operację synchronizacji między punktem końcowym usługi OneLake i analizą SQL.

Uprawnienia

Aby przenieść zabezpieczany z innego schematu, bieżący użytkownik musi mieć uprawnienie CONTROL do zabezpieczanego (nie schematu) i uprawnienia ALTER w schemacie docelowym.

Jeśli zabezpieczana ma na nim specyfikację EXECUTE AS OWNER, a właściciel jest ustawiony na WARTOŚĆ WŁAŚCICIEL SCHEMATu, użytkownik musi również mieć uprawnienie PERSONIFIKUJ właściciela schematu docelowego.

Wszystkie uprawnienia skojarzone z zabezpieczanym transferem są usuwane po przeniesieniu.

Przykłady

Odp. Przenoszenie własności tabeli

Poniższy przykład modyfikuje schemat HumanResources , przenosząc tabelę Address ze schematu Person do schematu HumanResources .

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

B. Przenoszenie własności typu

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

USE AdventureWorks2022;  
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  

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Przenoszenie własności tabeli

Poniższy przykład tworzy tabelę Region w schemacie dbo , tworzy Sales schemat, a następnie przenosi Region tabelę ze schematu dbo do schematu Sales .

CREATE TABLE dbo.Region   
    (Region_id INT NOT NULL,  
    Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

CREATE SCHEMA Sales;  
GO  

ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;  
GO