Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w Microsoft Fabric
Magazyn w Microsoft Fabric
Baza danych SQL w Microsoft Fabric
Nazwa obiektu bazy danych jest jego identyfikatorem.
Serwery, bazy danych i obiekty bazy danych, takie jak tabele, widoki, kolumny, indeksy, wyzwalacze, procedury, ograniczenia i reguły, mogą mieć identyfikatory. Większość obiektów wymaga identyfikatorów, ale niektóre obiekty, takie jak ograniczenia, sprawiają, że są opcjonalne.
Podczas definiowania obiektu należy utworzyć identyfikator obiektu. Użyj identyfikatora, aby odwołać 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 nienazwane ograniczenie. Ograniczenie klucza podstawowego nie ma identyfikatora określonego przez użytkownika, więc system przypisuje mu wygenerowaną nazwę, taką jak PK__TableX__D7CB9CCCEEF0806C. Tę nazwę można zobaczyć w widokach metadanych systemu, takich jak sys.key_constraints.
Nazwy ograniczeń i inne obiekty o zakresie schematu muszą być unikatowe w schemacie bazy danych. Na przykład dwa ograniczenia klucza podstawowego nie mogą współużytkować nazwy. Jednak nazwy kolumn muszą być unikatowe tylko w każdej tabeli, a nie w schemacie.
Sortowanie identyfikatora zależy od poziomu, na którym go definiujesz.
Domyślne sortowanie wystąpienia jest przypisywane obiektom na poziomie wystąpienia, takim jak loginy i nazwy baz danych.
Domyślne sortowanie bazy danych jest przypisywane do identyfikatorów obiektów w bazie danych, takich jak tabele, widoki i nazwy kolumn. Można na przykład utworzyć dwie tabele o nazwach, które różnią się tylko w przypadku bazy danych, która ma sortowanie z uwzględnieniem wielkości liter, ale nie można ich 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 formatu dla identyfikatorów. Nie są one rozdzielane w przypadku użycia w instrukcjach Transact-SQL. Regularne identyfikatory muszą być zgodne z regułami dla zwykłych identyfikatorów: mogą zawierać tylko litery, cyfry i niektóre symbole (
_,@,#,$), muszą zaczynać się literą lub jedną z_,@,#i nie mogą być słowem zastrzeżonym.USE AdventureWorks2025; GO SELECT * FROM HumanResources.Employee WHERE NationalIDNumber = 153479919;Identyfikatory rozdzielone są ujęte w podwójny cudzysłów (
") lub nawiasy ([i]). Ograniczniki umożliwiają używanie nazw, które w przeciwnym razie byłyby nieprawidłowe jako zwykłe identyfikatory, takie jak zastrzeżone słowa kluczowe, nazwy ze spacjami lub nazwy ze znakami specjalnymi. Identyfikatory, które już spełniają zasady dla zwykłych identyfikatorów, mogą być również ograniczane przez ograniczniki, ale w takim przypadku ograniczniki są opcjonalne. Aby uzyskać więcej informacji, zobacz Reguły dotyczące identyfikatorów rozdzielanych.USE AdventureWorks2025; GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919; --Delimiter is optional.
Identyfikatory, które nie są zgodne z regułami regularnych identyfikatorów, muszą być rozdzielane w instrukcji Transact-SQL. Przykład:
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.
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 dotyczące identyfikatorów ograniczonych
Identyfikatory rozdzielane są ujęte w nawiasy ([ i ]) lub podwójny cudzysłów ("). Mogą zawierać dowolną kombinację znaków, w tym spacje, zastrzeżone słowa kluczowe i znaki specjalne, które nie są dozwolone w zwykłych identyfikatorach.
Identyfikatory rozdzielane nawiasami
Identyfikatory rozdzielane nawiasami kwadratowymi są ujęte w nawiasy kwadratowe ([ i ]). Jeśli sam identyfikator zawiera prawy nawias kwadratowy (]), należy go uniknąć, podwojając go (]]). Lewy nawias kwadratowy ([) nie wymaga ucieczki.
Aby na przykład utworzyć i zapytać o tabelę, której nazwa zawiera nawiasy:
-- 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
Funkcja QUOTENAME zwraca prawidłowy identyfikator rozdzielany nawiasem dla danego ciągu i automatycznie obsługuje ucieczkę:
SELECT QUOTENAME('abc[]def');
Poprzedni przykład zwraca wartość [abc[]]def].
Identyfikatory rozdzielane podwójnym cudzysłowem
Identyfikatory ograniczone podwójnymi cudzysłowami są zawarte w znakach podwójnego cudzysłowu ("). Jeśli sam identyfikator zawiera podwójny cudzysłów, uniknie go, podwojając go ("").
Ograniczniki podwójnego cudzysłowu wymagają SET QUOTED_IDENTIFIER ON (ustawienie domyślne dla większości połączeń). Gdy QUOTED_IDENTIFIER jest OFF, silnik bazy danych traktuje podwójne ciągi jako literały ciągu zamiast identyfikatorów. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER.
Na przykład aby utworzyć tabelę i utworzyć zapytanie, która używa zarezerwowanych słów kluczowych jako identyfikatorów:
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 nie ma wpływu na identyfikatory rozdzielane nawiasami kwadratowymi. Ograniczniki nawiasów zawsze działają niezależnie od QUOTED_IDENTIFIER ustawienia.
Reguły dla zwykłych identyfikatorów
Nazwy zmiennych, funkcji i procedur składowanych muszą być zgodne z tymi regułami dotyczącymi identyfikatorów Transact-SQL.
Pierwszy znak musi być jednym z następujących znaków:
Litera zdefiniowana przez standard Unicode 3.2. Definicja Unicode liter zawiera znaki łacińskie od
adoz, odAdoZ, 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 Database Engine. 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, należy unikać 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 używaj nazw rozpoczynających się od@@.
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 (_).
Identyfikator nie może być słowem zastrzeżonym Transact-SQL. Database Engine zastrzega sobie zarówno wielkie, jak i małe wersje wyrazów zarezerwowanych. W przypadku używania identyfikatorów w instrukcjach Transact-SQL, identyfikatory, które nie są zgodne z tymi regułami, należy oznaczać przy pomocy podwójnych cudzysłowów lub nawiasów kwadratowych. Słowa zarezerwowane zależą od poziomu zgodności bazy danych. Ustaw poziom zgodności bazy danych przy użyciu instrukcji ALTER DATABASE compatibility level .
Nie używaj osadzonych spacji ani znaków specjalnych.
Nie używaj znaków dodatkowych.
Podczas stosowania identyfikatorów w instrukcjach Transact-SQL, identyfikatory, które nie są zgodne z tymi regułami, ogranicz przy użyciu podwójnych znaków cudzysłowu lub nawiasów kwadratowych. Niektóre z tych reguł różnią się w zależności od poziomu zgodności bazy danych.
Sortowanie wykazu w Azure SQL Database
Nie można zmienić ani ustawić sortowania serwera logicznego na 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. Obie reguły sortowania można określić niezależnie podczas tworzenia bazy danych w portalu Azure, w Transact-SQL (T-SQL) z użyciem CREATE DATABASE lub w programie PowerShell z użyciem 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).
Sortowanie katalogu w bazie danych SQL w Microsoft Fabric
Domyślne sortowanie bazy danych SQL w Fabric to SQL_Latin1_General_CP1_CI_AS. Można skonfigurować inne sortowanie w czasie wdrażania, ale nie można go zmienić po utworzeniu bazy danych. Poszczególne kolumny mogą używać własnych sortowań. Aby uzyskać więcej informacji na temat opcji wdrażania, zobacz Options w celu utworzenia bazy danych SQL w Fabric.