Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkten i Microsoft Fabric
Datamagasin i Microsoft Fabric
SQL-databas i Microsoft Fabric
Databasobjektets namn är 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 en icke namngiven begränsning. Den primära nyckelbegränsningen har ingen användardefinerad identifierare, så systemet tilldelar den ett genererat namn som PK__TableX__D7CB9CCCEEF0806C. Du kan se det här namnet 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 formatreglerna för identifierare. De avgränsas inte när de används i Transact-SQL-instruktioner. Vanliga identifierare måste följa reglerna för vanliga identifierare: de kan bara innehålla bokstäver, siffror och vissa symboler (
_, ,@#,$), måste börja med en bokstav eller en av_,@,#och kan inte vara ett reserverat ord.USE AdventureWorks2025; GO SELECT * FROM HumanResources.Employee WHERE NationalIDNumber = 153479919;Avgränsade identifierare omges av dubbla citattecken (
") eller hakparenteser ([och]). Med avgränsare kan du använda namn som annars skulle vara ogiltiga som vanliga identifierare, till exempel reserverade nyckelord, namn med blanksteg eller namn med specialtecken. Identifierare som redan följer reglerna för vanliga identifierare kan också avgränsas, men avgränsarna är valfria i så fall. Mer information finns i Regler för avgränsade identifierare.USE AdventureWorks2025; GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919; --Delimiter is optional.
Identifierare som inte följer reglerna för vanliga identifierare måste avgränsas i en Transact-SQL-instruktion. Till exempel:
USE AdventureWorks2025;
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 avgränsade identifierare
Avgränsade identifierare omges antingen av hakparenteser ([ och ]) eller dubbla citattecken ("). De kan innehålla valfri kombination av tecken, inklusive blanksteg, reserverade nyckelord och specialtecken som inte tillåts i vanliga identifierare.
Hakparentesavgränsade identifierare
Hakparentesavgränsade identifierare omges av hakparenteser ([ och ]). Om själva identifieraren innehåller en höger hakparentes (]) kan du undvika den genom att fördubbla den (]]). En vänster hakparentes ([) kräver inte utrymning.
Om du till exempel vill skapa och fråga en tabell vars namn innehåller hakparenteser:
-- Create a table with a ] character in its name.
CREATE TABLE [My]]Table]
(
ID INT PRIMARY KEY
);
GO
-- Reference the table in a query.
SELECT *
FROM [My]]Table];
GO
Funktionen QUOTENAME returnerar en giltig hakparentesavgränsad identifierare för en viss sträng och hanterar escapandet automatiskt.
SELECT QUOTENAME('abc[]def');
I föregående exempel returneras [abc[]]def].
Identifierare med dubbla citationstecken
Dubbelcitatavgränsade identifierare omges av dubbla citattecken ("). Om själva identifieraren innehåller ett dubbelt citattecken kan du undvika det genom att fördubbla det ("").
Avgränsare med dubbla citattecken kräver SET QUOTED_IDENTIFIER ON (standardvärdet för de flesta anslutningar). När QUOTED_IDENTIFIER är OFF behandlar Database Engine dubbelciterade strängar som strängliteraler i stället för identifierare. Mer information finns i SET QUOTED_IDENTIFIER.
Om du till exempel vill skapa och köra frågor mot en tabell som använder reserverade nyckelord som identifierare:
SET QUOTED_IDENTIFIER ON;
GO
-- Create a table using double-quote delimiters.
CREATE TABLE "My Table"
(
"Order" INT NOT NULL,
"Description" NVARCHAR (100)
);
GO
SELECT "Order",
"Description"
FROM "My Table";
GO
Note
SET QUOTED_IDENTIFIER påverkar inte hakparentesavgränsade identifierare. Hakparentesavgränsare fungerar alltid oavsett QUOTED_IDENTIFIER inställning.
Regler för vanliga identifierare
Namnen på variabler, funktioner och lagrade procedurer måste följa dessa regler för Transact-SQL identifierare.
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
atillzoch medAZ, 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 Database Engine. 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 tecken på tal eller dubbelnummertecken kan användas för att starta namnen på andra typer av objekt bör du undvika den här metoden.Vissa Transact-SQL funktioner har namn som börjar med dubbla snabel-a (
@@). Använd inte namn som börjar med@@för att undvika förvirring med dessa funktioner.
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 (_).
Identifieraren får inte vara ett Transact-SQL reserverat ord. Databasmotorn reserverar både versaler och gemener 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å .
Använd inte inbäddade blanksteg eller specialtecken.
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 av dessa regler varierar beroende på databasens kompatibilitetsnivå.
Katalogsortering i Azure SQL Database
Du kan inte ändra eller ange den logiska serversorteringen på 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 skapa databasen i Azure-portalen, i Transact-SQL (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
Standardsortering av en SQL-databas i Fabric är SQL_Latin1_General_CP1_CI_AS. Du kan konfigurera en annan sortering vid distributionen, men du kan inte ändra den när databasen har skapats. Enskilda kolumner kan använda sina egna sorteringar. Mer information om distributionsalternativ finns i Alternativ för att skapa en SQL-databas i Fabric.