Dela via


SKAPA 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

Skapar ett schema i den aktuella databasen. Transaktionen CREATE SCHEMA kan också skapa tabeller och vyer i det nya schemat och ange behörigheter för GRANT, DENY eller REVOKE för dessa objekt.

Transact-SQL syntaxkonventioner

Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]  
  
<schema_name_clause> ::=  
    {  
    schema_name  
    | AUTHORIZATION owner_name  
    | schema_name AUTHORIZATION owner_name  
    }  
  
<schema_element> ::=   
    {   
        table_definition | view_definition | grant_statement |   
        revoke_statement | deny_statement   
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

Argumentpunkter

schema_name
Är det namn med vilket schemat identifieras i databasen.

AUKTORISERING owner_name
Anger namnet på det huvudnamn på databasnivå som ska äga schemat. Det här huvudkontot kan äga andra scheman och kanske inte använder det aktuella schemat som standardschema.

table_definition
Anger en CREATE TABLE-instruktion som skapar en tabell i schemat. Huvudnamnet som kör den här instruktionen måste ha create table-behörighet för den aktuella databasen.

view_definition
Anger en CREATE VIEW-instruktion som skapar en vy i schemat. Huvudnamnet som kör den här instruktionen måste ha behörigheten SKAPA VY på den aktuella databasen.

grant_statement
Anger en GRANT-instruktion som beviljar behörigheter för alla skyddsbara filer förutom det nya schemat.

revoke_statement
Anger en REVOKE-instruktion som återkallar behörigheter för alla skyddsbara filer förutom det nya schemat.

deny_statement
Anger en DENY-instruktion som nekar behörigheter för alla skyddsbara filer förutom det nya schemat.

Anmärkningar

Anmärkning

Instruktioner som innehåller CREATE SCHEMA AUTHORIZATION men inte anger ett namn tillåts endast för bakåtkompatibilitet. Instruktionen orsakar inget fel, men skapar inget schema.

SKAPA SCHEMA kan skapa ett schema, tabellerna och vyerna som det innehåller samt behörigheterna GRANT, REVOKE eller DENY för alla skyddsbara i en enda instruktion. Den här instruktionen måste köras som en separat batch. Objekt som skapas av CREATE SCHEMA-instruktionen skapas i schemat som skapas.

CREATE SCHEMA-transaktioner är atomiska. Om något fel uppstår under körningen av en CREATE SCHEMA-instruktion skapas ingen av de angivna skyddsbara objekten och inga behörigheter beviljas.

Skyddsbara objekt som ska skapas av CREATE SCHEMA kan visas i valfri ordning, förutom vyer som refererar till andra vyer. I så fall måste den refererade vyn skapas innan vyn som refererar till den.

Därför kan en GRANT-instruktion bevilja behörighet för ett objekt innan själva objektet skapas, eller så kan en CREATE VIEW-instruktion visas före CREATE TABLE-uttrycken som skapar tabellerna som refereras av vyn. CREATE TABLE-instruktioner kan också deklarera sekundärnycklar till tabeller som definieras senare i CREATE SCHEMA-instruktionen.

Anmärkning

NEKA och ÅTERKALLA stöds i CREATE SCHEMA-instruktioner. DEY- och REVOKE-satser körs i den ordning de visas i INSTRUKTIONEN SKAPA SCHEMA.

Det huvudnamn som kör CREATE SCHEMA kan ange ett annat databashuvudnamn som ägare till schemat som skapas. Detta kräver ytterligare behörigheter, enligt beskrivningen i avsnittet "Behörigheter" senare i det här avsnittet.

Det nya schemat ägs av något av följande huvudnamn på databasnivå: databasanvändare, databasroll eller programroll. Objekt som skapas i ett schema ägs av schemats ägare och har en NULL-principal_id i sys.objects. Ägarskap för schemabaserade objekt kan överföras till valfritt huvudnamn på databasnivå, men schemaägaren behåller alltid KONTROLL-behörighet för objekt i schemat.

Anmärkning

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

Implicit schema och användarskapande

Anmärkning

Microsoft Entra-ID kallades tidigare Azure Active Directory (Azure AD).

I vissa fall kan en användare använda en databas utan att ha ett databasanvändarkonto (ett databasobjekt i databasen). Det här kan inträffa i följande situationer:

  • En inloggning har BEHÖRIGHETER FÖR KONTROLLSERVER .

  • En Windows-användare har inte ett enskilt databasanvändarkonto (ett databashuvudnamn i databasen), men får åtkomst till en databas som medlem i en Windows-grupp som har ett databasanvändarkonto (ett databashuvudnamn för Windows-gruppen).

  • En Microsoft Entra-användare har inte ett enskilt databasanvändarkonto (ett databasobjekt i databasen), men kommer åt en databas som medlem i en Microsoft Entra-grupp som har ett databasanvändarkonto (ett databashuvudnamn för Microsoft Entra-gruppen).

När en användare utan ett databasanvändarkonto skapar ett objekt utan att ange ett befintligt schema skapas automatiskt ett databashuvudnamn och standardschema i databasen för användaren. Det skapade databasobjektet och schemat har samma namn som det namn som användaren använde vid anslutning till SQL Server (inloggningsnamnet för SQL Server-autentisering eller Windows-användarnamnet).

Det här beteendet är nödvändigt för att tillåta användare som är baserade på Windows-grupper att skapa och äga objekt. Det kan dock leda till oavsiktligt skapande av scheman och användare. Undvik att implicit skapa användare och scheman genom att när det är möjligt uttryckligen skapa databasobjekt och tilldela ett standardschema. Eller uttryckligen ange ett befintligt schema när du skapar objekt i en databas med hjälp av två- eller tredelade objektnamn.

Anmärkning

Det går inte att skapa en Microsoft Entra-användare implicit i SQL Database. Eftersom skapandet av en Microsoft Entra-användare från en extern provider måste kontrollera användarens status i Microsoft Entra-ID misslyckas det med fel 2760: Det angivna schemanamnet "<user_name@domain>" finns inte eller så har du inte behörighet att använda den. Och sedan fel 2759: CREATE SCHEMA misslyckades på grund av tidigare fel. Försök att skapa eller ändra scheman resulterar i felet 15151: Det går inte att hitta användaren eftersom den inte finns eller inte har behörighet., följt av fel 2759. Om du vill kringgå dessa fel skapar du antingen Microsoft Entra-användaren från en extern provider eller ändrar Microsoft Entra-gruppen för att tilldela ett standardschema. Kör sedan instruktionen som skapar objektet igen.

I SQL Analytics-slutpunkten och warehouse i Microsoft Fabric kan schemanamn inte innehålla / eller \ sluta med en ..

Utfasningsmeddelande

CREATE SCHEMA-instruktioner som inte anger ett schemanamn stöds för närvarande för bakåtkompatibilitet. Sådana instruktioner skapar faktiskt inte ett schema i databasen, men de skapar tabeller och vyer och beviljar behörigheter. Huvudnamn behöver inte behörigheten SKAPA SCHEMA för att köra den här tidigare formen av CREATE SCHEMA, eftersom inget schema skapas. Den här funktionen tas bort från en framtida version av SQL Server.

Behörigheter

Kräver behörigheten SKAPA SCHEMA för databasen.

Om du vill skapa ett objekt som anges i instruktionen CREATE SCHEMA måste användaren ha motsvarande CREATE-behörighet.

Om du vill ange en annan användare som ägare till schemat som skapas måste anroparen ha IMITERa-behörighet på den användaren. Om en databasroll anges som ägare måste anroparen ha något av följande: medlemskap i rollen eller ALTER-behörighet för rollen.

Anmärkning

För den bakåtkompatibla syntaxen kontrolleras inga behörigheter för CREATE SCHEMA eftersom inget schema skapas.

Exempel

A. Skapa ett schema och bevilja behörigheter

I följande exempel skapas ett schema Sprockets som ägs av Annik som innehåller tabellen NineProngs. Uttalandet ger SELECT till Mandar och avslår SELECT till Prasanna. Observera att Sprockets och NineProngs skapas i en enda instruktion.

USE AdventureWorks2022;  
GO  
CREATE SCHEMA Sprockets AUTHORIZATION Annik  
    CREATE TABLE NineProngs (source int, cost int, partnumber int)  
    GRANT SELECT ON SCHEMA::Sprockets TO Mandar  
    DENY SELECT ON SCHEMA::Sprockets TO Prasanna;  
GO   

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

B. Skapa ett schema och en tabell i schemat

I följande exempel skapas ett schema Sales och sedan skapas en tabell Sales.Region i schemat.

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

C. Ange ägaren till ett schema

I följande exempel skapas ett schema Production som ägs av Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Se även

ÄNDRA SCHEMA (Transact-SQL)
SLÄPP SCHEMA (Transact-SQL)
BIDRAG (Transact-SQL)
NEKA (Transact-SQL)
ÅTERKALLA (Transact-SQL)
SKAPA VY (Transact-SQL)
HÄNDELSEDATA (Transact-SQL)
sys.schemas (Transact-SQL)
Skapa ett databasschema