Delen via


Database-identificatoren

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analyseeindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-database in Microsoft Fabric

De naam van het databaseobject is de id.

Servers, databases en databaseobjecten, zoals tabellen, weergaven, kolommen, indexen, triggers, procedures, beperkingen en regels, kunnen id's hebben. Voor de meeste objecten zijn id's vereist, maar sommige objecten, zoals beperkingen, maken ze optioneel.

U maakt een object-id wanneer u het object definieert. Gebruik de id om naar het object te verwijzen. Met de volgende instructie maakt u bijvoorbeeld een tabel met de id TableXen twee kolommen met de id's KeyCol en Description:

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

Deze tabel heeft een niet-benoemde beperking. De primaire-sleutelbeperking heeft geen door de gebruiker opgegeven id, dus het systeem wijst deze een gegenereerde naam toe, zoals PK__TableX__D7CB9CCCEEF0806C. U kunt deze naam zien in systeemmetagegevensweergaven, zoals sys.key_constraints.

Namen van beperkingen en andere schemabereikobjecten moeten uniek zijn binnen een databaseschema. Twee primaire sleutelbeperkingen kunnen bijvoorbeeld niet dezelfde naam hebben. Kolomnamen hoeven echter alleen uniek te zijn binnen elke tabel, niet binnen het schema.

De sortering van een identifier is afhankelijk van de niveau waarop u deze definieert.

  • De standaardsortering van het exemplaar wordt toegewezen aan identificaties van objecten op exemplaarniveau, zoals inloggegevens en databasenamen.

  • De standaardsortering van de database wordt toegewezen aan id's van objecten in een database, zoals tabellen, weergaven en kolomnamen. In een database met hoofdlettergevoelige sortering kunt u bijvoorbeeld twee tabellen maken met namen die alleen in hoofdlettergebruik verschillen, maar in een database met hoofdletterongevoelige sortering is dit niet mogelijk.

Note

De namen van variabelen, of de parameters van functies en opgeslagen procedures, moeten voldoen aan de regels voor Transact-SQL id's.

Klassen van identificatoren

Er zijn twee klassen id's:

  • Reguliere id's voldoen aan de notatieregels voor id's. Ze worden niet begrensd wanneer ze worden gebruikt in Transact-SQL instructies. Reguliere id's moeten voldoen aan de regels voor reguliere id's: ze kunnen alleen letters, cijfers en bepaalde symbolen (_, @, #, $), beginnen met een letter of een van _, @en #kunnen geen gereserveerd woord zijn.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Afgesloten identificatoren worden omgeven door dubbele aanhalingstekens (") of vierkante haken ([ en ]). Met scheidingstekens kunt u namen gebruiken die anders ongeldig zouden zijn als reguliere id's, zoals gereserveerde trefwoorden, namen met spaties of namen met speciale tekens. Id's die al voldoen aan de reguliere id-regels kunnen ook worden gescheiden, maar de scheidingstekens zijn in dat geval optioneel. Zie Regels voor gescheiden id's voor meer informatie.

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

Id's die niet voldoen aan de regels voor reguliere id's, moeten worden gescheiden in een Transact-SQL-instructie. Voorbeeld:

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.

Zowel reguliere als afgebakende identificaties moeten uit 1 tot en met 128 tekens bestaan. Voor lokale tijdelijke tabellen mag de id maximaal 116 tekens bevatten.

Regels voor begrensde identificaties

Begrensde identificeerders worden ofwel omsloten door vierkante haken ([ en ]) of door dubbele aanhalingstekens ("). Ze kunnen elke combinatie van tekens bevatten, waaronder spaties, gereserveerde trefwoorden en speciale tekens die niet zijn toegestaan in reguliere id's.

Id's met scheidingstekens tussen haakjes

Door haakjes gescheiden id's worden tussen vierkante haken ([ en ]) geplaatst. Als de id zelf een vierkante haak rechts bevat (]), kunt u deze escapen door deze te verdubbelen (]]). Voor een linkerhaak ([) is geen escape vereist.

Als u bijvoorbeeld een tabel wilt maken en er een query op wilt uitvoeren waarvan de naam vierkante haken bevat:

-- 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

De QUOTENAME functie retourneert een geldige id met scheidingstekens voor een bepaalde tekenreeks en verwerkt de escape automatisch:

SELECT QUOTENAME('abc[]def');

Het vorige voorbeeld retourneert [abc[]]def].

Id's met dubbele aanhalingstekens

Dubbele aanhalingstekens met scheidingstekens worden tussen dubbele aanhalingstekens (") geplaatst. Als de id zelf een dubbel aanhalingsteken bevat, kunt u deze escapen door deze te verdubbelen ("").

Scheidingstekens met dubbele aanhalingstekens vereisen SET QUOTED_IDENTIFIER ON (de standaardinstelling voor de meeste verbindingen). Wanneer QUOTED_IDENTIFIER is OFF, behandelt de Database Engine tekenreeksen met dubbele aanhalingstekens als letterlijke tekenreeksen in plaats van id's. Zie SET QUOTED_IDENTIFIERvoor meer informatie.

Als u bijvoorbeeld een tabel wilt maken en er query's op wilt uitvoeren waarin gereserveerde trefwoorden als id's worden gebruikt:

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 heeft geen invloed op id's met scheidingstekens. Haakscheidingstekens werken altijd ongeacht de QUOTED_IDENTIFIER instelling.

Regels voor reguliere id's

De namen van variabelen, functies en opgeslagen procedures moeten voldoen aan deze regels voor Transact-SQL id's.

  1. Het eerste teken moet een van de volgende tekens zijn:

    • Een letter zoals gedefinieerd door de Unicode Standard 3.2. De Unicode-definitie van letters bevat Latijnse tekens van a tot en met z, van A tot en met lettertekens Zuit andere talen.

    • Het onderstrepingsteken (_), bij teken (@) of nummerteken (#).

      Bepaalde symbolen aan het begin van een id hebben een speciale betekenis in de Database Engine. Een reguliere id die begint met het at-teken geeft altijd een lokale variabele of parameter aan en kan niet worden gebruikt als de naam van een ander type object. Een id die begint met een nummerteken geeft een tijdelijke tabel of procedure aan. Een id die begint met dubbele getaltekens (##) geeft een globaal tijdelijk object aan. Hoewel het cijferteken of het dubbele getalteken tekens kunnen worden gebruikt om de namen van andere typen objecten te beginnen, moet u deze procedure vermijden.

      Sommige Transact-SQL functies hebben namen die beginnen met dubbele tekens (@@). Om verwarring met deze functies te voorkomen, moet u geen namen gebruiken die beginnen met @@.

  2. Volgende tekens kunnen de volgende lijst bevatten:

    • Letters zoals gedefinieerd in de Unicode-standaard 3.2.

    • Decimale getallen uit Basic Latin of andere nationale scripts.

    • Het at-teken (), dollarteken (@$), cijferteken (#) of onderstrepingsteken (_).

  3. De id mag geen Transact-SQL gereserveerd woord zijn. De Database Engine behoudt zich zowel de hoofdletters als kleine letters van gereserveerde woorden voor. Wanneer u identificaties gebruikt in Transact-SQL-instructies, gebruik dubbele aanhalingstekens of haakjes om identificaties te begrenzen die niet aan deze regels voldoen. De woorden die zijn gereserveerd, zijn afhankelijk van het compatibiliteitsniveau van de database. Stel het compatibiliteitsniveau van de database in met behulp van de instructie ALTER DATABASE-compatibiliteitsniveau .

  4. Gebruik geen ingesloten spaties of speciale tekens.

  5. Gebruik geen aanvullende tekens.

Wanneer u identificatoren gebruikt in Transact-SQL-instructies, omring identificatoren die niet aan deze regels voldoen met dubbele aanhalingstekens of haakjes. Sommige van deze regels variƫren, afhankelijk van het compatibiliteitsniveau van de database.

Catalogussortering in Azure SQL Database

U kunt de sortering van de logische server niet wijzigen of instellen op Azure SQL Database. U kunt de sorteringen van elke database echter afzonderlijk configureren voor gegevens in de database en voor catalogus. De catalogussortering bepaalt de sortering voor systeemmetagegevens, zoals object-id's. U kunt beide sorteringen onafhankelijk opgeven wanneer u de database maken in de Azure portal, in Transact-SQL (T-SQL) met CREATE DATABASE of in PowerShell met New-AzSqlDatabase.

Zie CREATE DATABASE voor meer informatie en voorbeelden. Geef een sortering op voor de database (COLLATE) en een catalogussortering voor systeemmetagegevens en object-id's (CATALOG_COLLATION).

Catalogussortering in SQL-database in Microsoft Fabric

De standaardsortering van een SQL-database in Fabric is SQL_Latin1_General_CP1_CI_AS. U kunt een andere sortering configureren tijdens de implementatie, maar u kunt deze niet wijzigen nadat de database is gemaakt. Afzonderlijke kolommen kunnen hun eigen sorteringen gebruiken. Zie Options voor het maken van een SQL-database in Fabric voor meer informatie over implementatieopties.