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. Allt i SQL Server kan ha en identifierare. Servrar, databaser och databasobjekt, till exempel tabeller, vyer, kolumner, index, utlösare, procedurer, begränsningar och regler, kan ha identifierare. Identifierare krävs för de flesta objekt, men är valfria för vissa objekt, till exempel begränsningar.

En objektidentifierare skapas när objektet definieras. Identifieraren används sedan 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. Villkoret PRIMARY KEY har ingen identifierare.

Sortering av en identifierare beror på vilken nivå den definieras på. Identifierare för objekt på instansnivå, till exempel inloggningar och databasnamn, tilldelas standardsortering av instansen. Identifierare för objekt i en databas, till exempel tabeller, vyer och kolumnnamn, tilldelas standardsortering av databasen. Två tabeller med namn som endast skiljer sig åt kan till exempel skapas i en databas som har skiftlägeskänslig sortering, men som inte kan skapas 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 följande regler för Transact-SQL identifierare.

  1. Det första tecknet måste vara något av följande:

    • 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 (@@). För att undvika förvirring med dessa funktioner bör du inte använda namn som börjar med @@.

  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 identifierare används i Transact-SQL-instruktioner måste de identifierare som inte följer dessa regler avgränsas med dubbla citattecken eller hakparenteser. De ord som är reserverade beror på databasens kompatibilitetsnivå. Den här nivån kan anges med hjälp av instruktionen ALTER DATABASE-kompatibilitetsnivå .

  4. Inbäddade blanksteg eller specialtecken tillåts inte.

  5. Tilläggstecken tillåts inte.

När identifierare används i Transact-SQL-instruktioner måste de identifierare som inte följer dessa regler avgränsas med dubbla citattecken eller hakparenteser.

Note

Vissa regler för formatet för vanliga identifierare beror på databasens kompatibilitetsnivå. Den här nivån kan anges med hjälp av ALTER DATABASE-kompatibilitetsnivån.

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. Båda sorteringarna kan anges oberoende av varandra när du skapa databasen i Azure-portaleni T-SQL med CREATE DATABASEi 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

Du kan inte ändra eller ange den logiska serversortering på SQL-databasen i Fabric.

För närvarande är sorteringen av en SQL-databas i Fabric som standard SQL_Latin1_General_CP1_CI_AS och den kan inte uppdateras. Sortering på enskilda kolumner stöds.