Udostępnij za pomocą


Identyfikatory bazy danych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Nazwa obiektu bazy danych jest określana jako jego identyfikator. Wszystko w programie SQL Server może mieć identyfikator. Serwery, bazy danych i obiekty bazy danych, takie jak tabele, widoki, kolumny, indeksy, wyzwalacze, procedury, ograniczenia i reguły, mogą mieć identyfikatory. Identyfikatory są wymagane dla większości obiektów, ale są opcjonalne dla niektórych obiektów, takich jak ograniczenia.

Identyfikator obiektu jest tworzony po zdefiniowaniu obiektu. Następnie identyfikator jest używany do odwołowania się do obiektu. Na przykład poniższa instrukcja tworzy tabelę z identyfikatorem TableXi dwie kolumny z identyfikatorami KeyCol i Description:

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

Ta tabela ma również nienazwane ograniczenie. Ograniczenie PRIMARY KEY nie ma identyfikatora.

Sortowanie identyfikatora zależy od poziomu, na którym jest zdefiniowany. Identyfikatory obiektów na poziomie wystąpienia, takich jak identyfikatory logowania i nazwy baz danych, są przypisywane domyślne sortowanie wystąpienia. Identyfikatory obiektów w bazie danych, takie jak tabele, widoki i nazwy kolumn, są przypisywane domyślne sortowanie bazy danych. Na przykład dwie tabele o nazwach, które różnią się tylko w przypadku, można utworzyć w bazie danych, która ma sortowanie z uwzględnieniem wielkości liter, ale nie można utworzyć w bazie danych, która ma sortowanie bez uwzględniania wielkości liter.

Note

Nazwy zmiennych lub parametry funkcji i procedur składowanych muszą być zgodne z regułami dotyczącymi identyfikatorów Transact-SQL.

Klasy identyfikatorów

Istnieją dwie klasy identyfikatorów:

  • Regularne identyfikatory są zgodne z regułami dotyczącymi formatu identyfikatorów. Zwykłe identyfikatory nie są rozdzielane, gdy są używane w instrukcjach Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Identyfikatory rozdzielone są ujęte w podwójny cudzysłów (") lub nawiasy ([ i ]). Identyfikatory zgodne z regułami formatu identyfikatorów mogą nie być oddzielane. Przykład:

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

Identyfikatory, które nie są zgodne ze wszystkimi regułami identyfikatorów, muszą być rozdzielane w instrukcji Transact-SQL. Przykład:

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.

Zarówno zwykłe, jak i rozdzielane identyfikatory muszą zawierać od 1 do 128 znaków. W przypadku lokalnych tabel tymczasowych identyfikator może mieć maksymalnie 116 znaków.

Reguły dla zwykłych identyfikatorów

Nazwy zmiennych, funkcji i procedur składowanych muszą być zgodne z następującymi regułami dotyczącymi identyfikatorów Transact-SQL.

  1. Pierwszy znak musi być jednym z następujących elementów:

    • Litera zdefiniowana przez standard Unicode 3.2. Definicja Unicode liter zawiera znaki łacińskie od a do z, od A do Z, a także znaki litery z innych języków.

    • Podkreślnik (_), znak at (@) lub znak numeru (#).

      Niektóre symbole na początku identyfikatora mają specjalne znaczenie w programie SQL Server. Zwykły identyfikator rozpoczynający się od znaku @ zawsze oznacza zmienną lokalną lub parametr i nie może być używany jako nazwa jakiegokolwiek innego typu obiektu. Identyfikator rozpoczynający się od znaku liczbowego oznacza tymczasową tabelę lub procedurę. Identyfikator rozpoczynający się od podwójnych znaków liczbowych (##) oznacza globalny obiekt tymczasowy. Chociaż znak numeru lub znaki podwójnego numeru mogą służyć do rozpoczęcia nazw innych typów obiektów, nie zalecamy tej praktyki.

      Niektóre funkcje Transact-SQL mają nazwy rozpoczynające się od podwójnych znaków (@@). Aby uniknąć pomyłek z tymi funkcjami, nie należy używać nazw rozpoczynających się od @@.

  2. Kolejne znaki mogą zawierać następującą listę:

    • Litery zdefiniowane w standardzie Unicode 3.2.

    • Liczby dziesiętne z podstawowego alfabetu łacińskiego lub innych skryptów krajowych.

    • Znak at (), znak dolara (@$), znak numeru (#) lub podkreślenie (_).

  3. Identyfikator nie może być Transact-SQL słowem zastrzeżonym. Program SQL Server rezerwuje zarówno wielkie, jak i małe wersje zarezerwowanych wyrazów. Gdy identyfikatory są używane w instrukcjach Transact-SQL, identyfikatory, które nie są zgodne z tymi regułami, muszą być rozdzielane podwójnym cudzysłowem lub nawiasami kwadratowymi. Słowa zarezerwowane zależą od poziomu zgodności bazy danych. Ten poziom można ustawić za pomocą instrukcji ALTER DATABASE compatibility level.

  4. Spacje osadzone lub znaki specjalne nie są dozwolone.

  5. Znaki dodatkowe nie są dozwolone.

Gdy identyfikatory są używane w instrukcjach Transact-SQL, identyfikatory, które nie są zgodne z tymi regułami, muszą być rozdzielane podwójnym cudzysłowem lub nawiasami kwadratowymi.

Note

Niektóre reguły dotyczące formatu zwykłych identyfikatorów zależą od poziomu zgodności bazy danych. Ten poziom można ustawić przy użyciu poziomu zgodności ALTER DATABASE.

Sortowanie wykazu w usłudze Azure SQL Database

Nie można zmienić, ani ustawić sortowania serwera logicznego w usłudze Azure SQL Database. Można jednak skonfigurować sortowania poszczególnych baz danych oddzielnie dla danych w bazie danych i katalogu. Sortowanie wykazu określa sortowanie metadanych systemu, takich jak identyfikatory obiektów. Oba sortowania można określić niezależnie, gdy utworzyć bazę danych w witrynie Azure Portalw języku T-SQL za pomocą CREATE DATABASE, w programie PowerShell z new-AzSqlDatabase.

Aby uzyskać szczegółowe informacje i przykłady, zobacz CREATE DATABASE (TWORZENIE BAZY DANYCH). Określ sortowanie dla bazy danych (COLLATE) i sortowanie katalogu dla metadanych systemu i identyfikatorów obiektów (CATALOG_COLLATION).

Porządkowanie katalogu w bazie danych SQL na platformie Microsoft Fabric

Nie można zmienić ani ustawić sortowania na serwerze logicznym w bazie danych SQL w Fabric.

Obecnie domyślnym sortowaniem bazy danych SQL w Fabric jest SQL_Latin1_General_CP1_CI_AS i nie można go zaktualizować. Obsługiwane jest kolacjonowanie poszczególnych kolumn.