Sdílet prostřednictvím


Identifikátory databáze

Platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Konec bodu analýzy SQL v Microsoft FabricWarehouse ve Microsoft FabricSQL databáze v Microsoft Fabricu

Název databázového objektu je jeho identifikátor.

Servery, databáze a databázové objekty, jako jsou tabulky, zobrazení, sloupce, indexy, triggery, procedury, omezení a pravidla, můžou mít identifikátory. Většina objektů vyžaduje identifikátory, ale některé objekty, jako jsou omezení, jsou volitelné.

Identifikátor objektu vytvoříte při definování objektu. Použijte identifikátor pro odkaz na objekt. Například následující příkaz vytvoří tabulku s identifikátorem TableXa dva sloupce s identifikátory KeyCol a Description:

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

Tato tabulka má nepojmenované omezení. Omezení primárního klíče nemá žádný identifikátor zadaný uživatelem, takže systém mu přiřadí vygenerovaný název, například PK__TableX__D7CB9CCCEEF0806C. Tento název můžete zobrazit v zobrazeních systémových metadat, jako sys.key_constraints.

Názvy omezení a další objekty s oborem schématu musí být v rámci schématu databáze jedinečné. Například dvě omezení primárního klíče nemůžou sdílet název. Názvy sloupců však musí být jedinečné pouze v rámci každé tabulky, nikoli ve schématu.

Seřazení identifikátoru závisí na úrovni, na níž je definován.

  • Výchozí kolace instance je přiřazena identifikátorům objektů na úrovni instance, jako jsou přihlašovací jména a názvy databází.

  • Výchozí kolace databáze je přiřazena identifikátorům objektů v databázi, jako jsou tabulky, zobrazení a názvy sloupců. Můžete například vytvořit dvě tabulky s názvy, které se liší pouze v případě databáze, která obsahuje kolaci s rozlišováním velkých a malých písmen, ale nemůžete je vytvořit v databázi, která má kolaci nerozlišující velká a malá písmena.

Note

Názvy proměnných nebo parametry funkcí a uložených procedur musí splňovat pravidla pro identifikátory Transact-SQL.

Třídy identifikátorů

Existují dvě třídy identifikátorů:

  • Běžné identifikátory odpovídají pravidlům formátu identifikátorů. Nejsou oddělené při použití v příkazech Transact-SQL. Pravidelné identifikátory musí dodržovat pravidla pro běžné identifikátory: mohou obsahovat pouze písmena, číslice a určité symboly (_, @, , #$), musí začínat písmenem nebo jedním z _, @#a nesmí být vyhrazené slovo.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Identifikátory s oddělovači jsou uzavřeny v uvozovkách (") nebo hranatých závorkách ([ a ]). Oddělovače umožňují používat názvy, které by jinak byly neplatné jako běžné identifikátory, jako jsou vyhrazená klíčová slova, názvy s mezerami nebo názvy se speciálními znaky. Identifikátory, které již splňují pravidla běžného identifikátoru, mohou být také odděleny, ale oddělovače jsou v takovém případě volitelné. Další informace naleznete v tématu Pravidla pro identifikátory s oddělovači.

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

Identifikátory, které nevyhovují pravidlům pro běžné identifikátory, musí být v příkazu Transact-SQL odděleny. Například:

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ěžné i oddělené identifikátory musí obsahovat 1 až 128 znaků. U místních dočasných tabulek může mít identifikátor maximálně 116 znaků.

Pravidla pro identifikátory s oddělovači

Identifikátory s oddělovači jsou buď uzavřené v hranatých závorkách ([ a ]) nebo v uvozovkách ("). Můžou obsahovat libovolnou kombinaci znaků, včetně mezer, vyhrazených klíčových slov a speciálních znaků, které nejsou v běžných identifikátorech povolené.

Identifikátory uzavřené v závorkách

Identifikátory oddělené hranatými závorkami jsou uzavřeny v hranatých závorkách ([ a ]). Pokud samotný identifikátor obsahuje pravou závorku (]), uchytněte ho tím, že ho zdvojíte (]]). Levá hranatá závorka[ () nevyžaduje zapouzdření.

Pokud chcete například vytvořit a dotazovat tabulku, jejíž název obsahuje hranaté závorky:

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

Funkce QUOTENAME vrátí platný identifikátor s oddělovači závorek pro daný řetězec a automaticky zpracuje zapouzdření:

SELECT QUOTENAME('abc[]def');

Předchozí příklad vrátí [abc[]]def].

Identifikátory ohraničené dvojitými uvozovkami

Identifikátory oddělené dvojitými uvozovkami jsou uzavřeny do dvojitých uvozovek ("). Pokud samotný identifikátor obsahuje dvojitou uvozovku, zdvojte ji ("").

Oddělovače dvojitých uvozovek vyžadují SET QUOTED_IDENTIFIER ON (výchozí hodnota pro většinu připojení). Pokud je QUOTED_IDENTIFIEROFF, Database Engine považuje řetězce s dvojitými uvozovkami za řetězcové literály místo identifikátorů. Další informace naleznete v tématu SET QUOTED_IDENTIFIER.

Pokud například chcete vytvořit a dotazovat tabulku, která jako identifikátory používá vyhrazená klíčová slova:

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 nemá vliv na identifikátory oddělené hranatými závorkami. Oddělovače závorek vždy fungují bez ohledu na QUOTED_IDENTIFIER nastavení.

Pravidla pro běžné identifikátory

Názvy proměnných, funkcí a uložených procedur musí dodržovat tato pravidla pro identifikátory Transact-SQL.

  1. První znak musí být jeden z následujících znaků:

    • Písmeno definované standardem Unicode 3.2. Definice písmen Unicode zahrnuje znaky latinky od a do z, od A do Z a také písmena z jiných jazyků.

    • Podtržítko (_), znaménko (@) nebo znaménko čísla (#).

      Určité symboly na začátku identifikátoru mají v Database Engine zvláštní význam. Běžný identifikátor začínající znakem at vždy označuje místní proměnnou nebo parametr a nedá se použít jako název žádného jiného typu objektu. Identifikátor, který začíná znaménkem čísla, označuje dočasnou tabulku nebo proceduru. Identifikátor, který začíná dvojitými znaky čísla („##“) označuje globální dočasný objekt. I když se znaménko čísel nebo znaky dvojitého čísla dají použít k zahájení názvů jiných typů objektů, měli byste se tomuto postupu vyhnout.

      Některé Transact-SQL funkce mají názvy začínající dvojitými znaky (@@). Abyste se vyhnuli nejasnostem s těmito funkcemi, nepoužívejte názvy začínající na @@.

  2. Následující znaky můžou obsahovat následující seznam:

    • Písmena definovaná ve standardu Unicode 3.2.

    • Desetinná čísla ze základní latinky nebo jiných národních skriptů.

    • Znaménko zavináč (@), znak dolaru ($), křížek (#) nebo podtržítko (_).

  3. Identifikátor nesmí být Transact-SQL vyhrazeným slovem. Database Engine si vyhrazuje velká i malá písmena rezervovaných slov. Pokud používáte identifikátory v Transact-SQL příkazech, oddělte identifikátory, které nevyhovují těmto pravidlům, pomocí dvojitých uvozovek nebo hranatých závorek. Rezervovaná slova závisí na úrovni kompatibility databáze. Nastavte úroveň kompatibility databáze pomocí příkazu ALTER DATABASE pro úroveň kompatibility.

  4. Nepoužívejte vložené mezery ani speciální znaky.

  5. Nepoužívejte doplňkové znaky.

Pokud používáte identifikátory v Transact-SQL příkazech, oddělte identifikátory, které nevyhovují těmto pravidlům, pomocí dvojitých uvozovek nebo hranatých závorek. Některá z těchto pravidel se liší v závislosti na úrovni kompatibility databáze.

Kolace katalogu v Azure SQL Database

Na platformě Azure SQL Database nelze změnit ani nastavit kolaci logického serveru. Kolace jednotlivých databází ale můžete nakonfigurovat samostatně pro data v databázi a pro katalog. Kolace katalogu určuje kolaci pro systémová metadata, například identifikátory objektů. Obě kolace můžete zadat nezávisle při vytvoření databáze na portálu Azure, v Transact-SQL (T-SQL) s CREATE DATABASE nebo v PowerShellu s New-AzSqlDatabase.

Podrobnosti a příklady najdete v tématu CREATE DATABASE. Zadejte kolaci pro databázi (COLLATE) a kolaci pro katalog určenou pro systémová metadata a identifikátory objektů (CATALOG_COLLATION).

Řazení katalogu v databázi SQL v Microsoft Fabric

Výchozí kolace databáze SQL v Fabric je SQL_Latin1_General_CP1_CI_AS. V době nasazení můžete nakonfigurovat jinou kolaci, ale po vytvoření databáze ji nemůžete změnit. Jednotlivé sloupce mohou používat vlastní řazení. Další informace o možnostech nasazení najdete v tématu Options k vytvoření databáze SQL v Fabric.