Dela via


ALTER SCHEMA (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Överför ett skydd mellan scheman.

Transact-SQL syntaxkonventioner

Syntax

-- 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   
[;]  

Argumentpunkter

schema_name

Målschemat i den aktuella databasen. Skyddsbara flyttas till det här schemat. Kan inte vara SYS eller INFORMATION_SCHEMA.

<entity_type>

Klassen för den entitet som ägaren ändras för. Objektet är standard.

securable_name

Namnet på en eller två delar för ett schemaomfattningsbegränsat skydd som ska flyttas till schemat.

Anmärkningar

Användare och scheman är helt separata. Scheman motsvarar inte databasanvändare. Använd systemkatalogvyer för att identifiera eventuella skillnader mellan databasanvändare och scheman.

ALTER SCHEMA kan bara användas för att flytta skyddsbara filer mellan scheman i samma databas. Om du vill ändra eller släppa en skyddsbar i ett schema använder du ALTER- eller DROP-instruktionen som är specifik för den skyddsbara.

Om ett endelsnamn används för securable_name används de namnmatchningsregler som för närvarande gäller för att hitta skyddsbara.

Alla behörigheter som är associerade med skyddsbara tas bort när skyddsbara flyttas till det nya schemat. Om ägaren till skyddsbara objektet uttryckligen har angetts förblir ägaren oförändrad. Om ägaren till den skyddsbara enheten har angetts till SCHEMAÄGARE förblir ägaren SCHEMAÄGARE. Men efter flytten matchas SCHEMAÄGAREN med ägaren av det nya schemat. Den principal_id nya ägaren blir NULL.

Viktigt!

Om du använder ALTER SCHEMA för att överföra en lagrad procedur, funktion, vy eller utlösare till ett annat schema ändras inte schemanamnet, om det finns, för objektet i kolumnen i definitionkatalogvyn sys.sql_modules eller i resultatet av den OBJECT_DEFINITION inbyggda funktionen. ALTER SCHEMA Därför bör inte användas för att flytta dessa objekttyper. Släpp i stället och återskapa objektet i det nya schemat.

Om du flyttar ett objekt, till exempel en tabell eller synonym, uppdateras inte referenser till objektet automatiskt. Du måste ändra alla objekt som refererar till det överförda objektet manuellt. Om du till exempel flyttar en tabell och tabellen refereras till i en utlösare måste du ändra utlösaren så att den återspeglar det nya schemanamnet. Använd sys.sql_expression_dependencies för att visa beroenden för objektet innan du flyttar det.

Om du vill ändra schemat för en tabell med hjälp av SQL Server Management Studio högerklickar du på tabellen i Object Explorer och väljer design. Tryck på F4 för att öppna fönstret Egenskaper. I rutan Schema väljer du ett nytt schema.

ALTER SCHEMA använder ett schemanivålås.

Försiktighet

Det går inte att överföra en tabell mellan scheman via T-SQL i sql-analysslutpunkten. Det kan påverka synkroniseringsåtgärden mellan OneLake- och SQL-analysslutpunkten negativt.

Behörigheter

Om du vill överföra en skyddsbar fil från ett annat schema måste den aktuella användaren ha KONTROLL-behörighet för det skyddbara (inte schemat) och ALTER-behörigheten för målschemat.

Om säkerhetsobjektet har en EXECUTE AS OWNER-specifikation på sig och ägaren är inställd på SCHEMAÄGARE, måste användaren också ha PERSONIFIERa behörighet för ägaren av målschemat.

Alla behörigheter som är associerade med den skyddbara som överförs tas bort när den flyttas.

Exempel

A. Överföra ägarskapet för en tabell

I följande exempel ändras schemat HumanResources genom att tabellen Address överförs från schemat Person till HumanResources schemat.

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

B. Överföra ägarskap av en typ

I följande exempel skapas en typ i Production schemat och sedan överförs typen till Person schemat.

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  

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Överföra ägarskapet för en tabell

I följande exempel skapas en tabell Region i dbo schemat, ett Sales schema skapas och tabellen flyttas Region sedan från dbo schemat till Sales schemat.

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