Dela via


Databasidentifierare

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Namnet på databasobjektet kallas dess identifierare.

Servrar, databaser och databasobjekt, till exempel tabeller, vyer, kolumner, index, utlösare, procedurer, begränsningar och regler, kan ha identifierare. De flesta objekt kräver identifierare, men vissa objekt, till exempel begränsningar, gör dem valfria.

Du skapar en objektidentifierare när du definierar objektet. Använd identifieraren för att referera till objektet. Följande instruktion skapar till exempel en tabell med identifieraren TableXoch två kolumner med identifierarna KeyCol och Description:

CREATE TABLE TableX (
    KeyCol INT PRIMARY KEY,
    Description NVARCHAR(80)
);

Den här tabellen har också en icke namngiven begränsning. Den primära nyckelbegränsningen har ingen identifierare och skulle därför tilldelas ett systemgenererat namn som PK__TableX__D7CB9CCCEEF0806C, som du kan observera i systemmetadatavyer som sys.key_constraints.

Villkorsnamn och andra schemaomfattande objekt måste vara unika i ett databasschema. Två primära nyckelbegränsningar kan till exempel inte dela ett namn. Kolumnnamn behöver dock bara vara unika i varje tabell, inte inom schemat.

Sortering av en identifierare beror på vilken nivå du definierar den på.

  • Instansens standardkollationering tilldelas till identifierare för objekt på instansnivå, såsom inloggningar och databasnamn.
  • Standardsortering av databasen tilldelas till identifierare för objekt i en databas, till exempel tabeller, vyer och kolumnnamn. Du kan till exempel skapa två tabeller med namn som bara skiljer sig åt i en databas som har skiftlägeskänslig sortering, men du kan inte skapa dem i en databas som har skiftlägesokänslig sortering.

Note

Namnen på variabler eller parametrarna för funktioner och lagrade procedurer måste följa reglerna för Transact-SQL identifierare.

Klasser av identifierare

Det finns två klasser av identifierare:

  • Vanliga identifierare följer reglerna för formatet för identifierare. Vanliga identifierare avgränsas inte när de används i Transact-SQL-instruktioner.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Avgränsade identifierare omges av dubbla citattecken (") eller hakparenteser ([ och ]). Identifierare som följer reglerna för formatet för identifierare kanske inte avgränsas. Till exempel:

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM [HumanResources].[Employee] --Delimiter is optional.
    WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
    

Identifierare som inte följer alla regler för identifierare måste avgränsas i en Transact-SQL-instruktion. Till exempel:

USE AdventureWorks2022;
GO

--Identifier contains a space and uses a reserved keyword.
CREATE TABLE [SalesOrderDetail Table] (
    [Order] INT NOT NULL,
    [SalesOrderDetailID] INT IDENTITY(1, 1) NOT NULL,
    [OrderQty] SMALLINT NOT NULL,
    [ProductID] INT NOT NULL,
    [UnitPrice] MONEY NOT NULL,
    [UnitPriceDiscount] MONEY NOT NULL,
    [ModifiedDate] DATETIME NOT NULL,
    CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED (
        [Order] ASC,
        [SalesOrderDetailID] ASC
    )
);
GO

SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.

Både vanliga och avgränsade identifierare måste innehålla mellan 1 och 128 tecken. För lokala temporära tabeller kan identifieraren ha högst 116 tecken.

Regler för vanliga identifierare

Namnen på variabler, funktioner och lagrade procedurer måste följa dessa regler för Transact-SQL identifierare.

  1. Det första tecknet måste vara ett av följande tecken:

    • En bokstav som definieras av Unicode Standard 3.2. Unicode-definitionen av bokstäver innehåller latinska tecken från a till zoch med AZ , och även bokstavstecken från andra språk.

    • Understrecket (_), vid tecknet (@) eller nummertecknet (#).

      Vissa symboler i början av en identifierare har särskild betydelse i SQL Server. En vanlig identifierare som börjar med vid tecknet anger alltid en lokal variabel eller parameter och kan inte användas som namn på någon annan typ av objekt. En identifierare som börjar med ett taltecken anger en tillfällig tabell eller procedur. En identifierare som börjar med dubbelnummertecken (##) anger ett globalt tillfälligt objekt. Även om nummertecken eller dubbelnummertecken kan användas för att inleda namnen på andra typer av objekt rekommenderar vi inte denna praxis.

      Vissa Transact-SQL-funktioner har namn som börjar med dubbel at-tecken (@@). Använd inte namn som börjar med @@för att undvika förvirring med dessa funktioner.

  2. Följande tecken kan innehålla följande lista:

    • Bokstäver enligt definitionen i Unicode Standard 3.2.

    • Decimaltal från antingen grundläggande latinska eller andra nationella skript.

    • At-tecknet (@), dollartecknet ($), nummertecknet (#) eller understrecket (_).

  3. Identifieraren får inte vara ett Transact-SQL reserverat ord. SQL Server förbehåller både versala och gemena versioner av reserverade ord. När du använder identifierare i Transact-SQL-instruktioner avgränsar du identifierare som inte följer dessa regler med hjälp av dubbla citattecken eller hakparenteser. De ord som är reserverade beror på databasens kompatibilitetsnivå. Ange databasens kompatibilitetsnivå med hjälp av instruktionen ALTER DATABASE-kompatibilitetsnivå .

  4. Använd inte inbäddade blanksteg eller specialtecken.

  5. Använd inte tilläggstecken.

När du använder identifierare i Transact-SQL-instruktioner avgränsar du identifierare som inte följer dessa regler med hjälp av dubbla citattecken eller hakparenteser.

Vissa regler för formatet för vanliga identifierare beror på databasens kompatibilitetsnivå.

Katalogsortering i Azure SQL Database

Du kan inte ändra eller ange den logiska serversorteringen i Azure SQL Database. Du kan dock konfigurera varje databassortering separat för data i databasen och för katalogen. Katalogsortering avgör sortering för systemmetadata, till exempel objektidentifierare. Du kan ange båda sorteringarna oberoende av varandra när du skapar databasen i Azure-portalen, i T-SQL med CREATE DATABASE eller i PowerShell med New-AzSqlDatabase.

Mer information och exempel finns i SKAPA DATABAS. Ange en sortering för databasen (COLLATE) och en katalogsortering för systemmetadata och objektidentifierare (CATALOG_COLLATION).

Katalogsortering i SQL-databas i Microsoft Fabric

För närvarande är sorteringen av en SQL-databas i Fabric SQL_Latin1_General_CP1_CI_AS som standard, men den kan konfigureras under distributionen. Sorteringen kan inte uppdateras efter distributionen. Sortering på enskilda kolumner stöds. Mer information om distributionsalternativ finns i Alternativ för att skapa en SQL-databas i Infrastrukturresurser.