Identyfikatory rozdzielanego (aparat bazy danych)

Identyfikator, który spełnia wszystkie reguły dla formatu identyfikatorów można z lub bez ograniczników.Identyfikator, który nie spełnia reguł dla formatu standardowych identyfikatorów musi zawsze ograniczać.

Ostrzeżenie

Microsoft SQL Server nie rozpoznaje nazwy zmiennych i procedura składowana parametry, które są rozdzielane.Te typy identyfikatorów muszą być zgodne z zasadami regularne identyfikatorów.

Identyfikatory rozdzielane są używane w następujących sytuacjach:

  • Kiedy słowa zastrzeżone są używane dla nazwy lub części nazw obiektów.

    Zastrzeżone nie powinien służyć jako nazwy obiektów.Uaktualniony ze starszej wersja bazy danych SQL Server może zawierać identyfikatory zawierające słowa zarezerwowane nie w starszej wersja, ale są słowa zarezerwowane dla bieżącej wersja SQL Server.Można odwołać się do obiektu za pomocą identyfikatorów rozdzielanego, dopóki nie można zmienić nazwy.

  • Kiedy używasz znaki, które nie są wymienione jako kwalifikowanych identyfikatorów.

    SQL Server Umożliwia dowolny znak w bieżącej strona kodowa do identyfikator z ogranicznikami.Jednakże niekontrolowane stosowanie specjalnych znaków w nazwie obiektu może utrudnić instrukcji SQL i skryptów do odczytywania i utrzymania.Na przykład można utworzyć tabela o nazwie Employee], gdzie zamykający nawias kwadratowy jest częścią nazwy.W tym celu mają escape zamykający nawias kwadratowy przy użyciu dwóch więcej nawiasy kwadratowe, jak pokazano poniżej:

    CREATE TABLE [Employee]]] 
    (
    EmployeeID int IDENTITY (1,1) NOT NULL,
    FirstName varchar(30),
    LastName varchar(30)
    )
    

Ostrzeżenie

Ograniczniki są tylko identyfikatory.Ograniczniki nie można używać słów kluczowych, nawet jeśli są one oznaczone jako zastrzeżony w SQL Server.

Poniżej przedstawiono typy ograniczników w Transact-SQL:

  • Identyfikatorów w cudzysłowach są rozdzielone w podwójny cudzysłów ("):

    SELECT * FROM "Blanks in Table Name"
    
  • Identyfikatory ujętego w nawiasy są rozdzielone w nawiasach kwadratowych ([]):

    SELECT * FROM [Blanks In Table Name]
    

Identyfikatorów w cudzysłowach są ważne tylko wtedy, gdy opcja QUOTED_IDENTIFIER jest zestaw on.Domyślnie program Microsoft OLE DB Provider for SQL Server i SQL Server sterownik ODBC zestaw QUOTED_IDENTIFIER on podczas nawiązywania.

Regardless of the interface used, individual applications or users may change the setting at any time.SQL Server provides several ways to specify this option.Na przykład w SQL Server Management Studio, opcję zestaw w oknie dialogowym.W Transact-SQL, zestaw opcję na różnych poziomach za pomocą zestaw QUOTED_IDENTIFIER opcję QUOTED_IDENTIFIER ALTER DATABASE, lub Opcje użytkownika z opcją sp_configure.

Gdy jest QUOTED_IDENTIFIER zestaw on, SQL Server zasadami ISO stosowania podwójnych cudzysłowów (") i pojedynczy znak cudzysłowu (') w instrukcji SQL.Na przykład:

  • Znaki cudzysłowu mogą służyć tylko do rozdzielenia identyfikatorów.Nie można używać do ograniczania ciągów znaków.

    Aby zachować zgodność z istniejącymi aplikacjami SQL Server nie pełni Wymuszaj reguły.Ciągi znaków można ująć w podwójny cudzysłów, jeśli ciąg nie przekracza długość identyfikatora.Praktyka ta nie jest zalecane.

  • Należy ująć ciągi znaków muszą być używane znaki pojedynczego cudzysłowu.Nie można używać do ograniczania identyfikatorów.

    Jeśli ciąg znaków zawiera osadzone pojedynczy znak cudzysłowu, należy wstawić dodatkowe pojedynczego cudzysłowu z przodu osadzony znak.Na przykład:

    SELECT * FROM "My Table"
    WHERE "Last Name" = 'O''Brien'
    

Ostrzeżenie

Jeśli rozdzielany identyfikatory są używane podczas nazywania obiektu i nazwa obiektu zawiera końcowe spacje, SQL Server przechowuje nazwę bez spacji końcowych.

Po QUOTED_IDENTIFIER zestaw do OFF, SQL Server dla pojedyncze i podwójne cudzysłowy stosowane są następujące reguły:

  • Nie można użyć cudzysłowów do rozdzielenia identyfikatorów.Natomiast nawiasy mają być używane jako ograniczniki.

  • Pojedyncze lub podwójne cudzysłowy można ująć ciągów znaków.

    Jeśli używane są znaki cudzysłowu, osadzone cudzysłowy pojedyncze ma oznaczona dwa znaki pojedynczego cudzysłowu.Na przykład:

    SELECT * FROM [My Table]
    WHERE [Last Name] = "O'Brien"
    

Ograniczniki w nawiasach zawsze można, niezależnie od ustawienia QUOTED_IDENTIFIER.

Zasady rozdzielanego identyfikatory

Następujące reguły w formacie rozdzielanego identyfikatory:

  • Identyfikatory rozdzielanego może zawierać tę samą liczbę znaków jako regularnych identyfikatorów.To od 1 do 128 znaków, nie włączając znaków ogranicznika.Lokalne tabela tymczasowa identyfikatory mogą być 116 znaków.

  • Treść identyfikatora może zawierać dowolną kombinację znaków w bieżącej strona kodowa, z wyjątkiem rozdzielającego samych znaków.Na przykład identyfikatory rozdzielanego może zawierać spacje, znaki prawidłowe identyfikatory regularnych i jeden z następujących znaków.

    tyldy (~)

    Łącznik (-)

    wykrzyknik (!)

    nawias klamrowy otwierający ({})

    procent (%)

    nawias klamrowy zamykający (})

    daszek (^)

    apostrof (')

    ampersand (&)

    kropka (.)

    Lewy nawias (())

    kreski ułamkowej odwróconej (\)

    Prawy nawias ())

    akcentu (')

Następujące przykłady używają identyfikatorów w cudzysłowach tabela nazw i kolumna nazwy.Obie metody określania identyfikatory rozdzielane są pokazano poniżej:

SET QUOTED_IDENTIFIER ON;
GO
CREATE TABLE "$Employee Data"
(
 "^First Name"   varchar(25) NOT NULL,
 "^Last Name"   varchar(25) NOT NULL,
 "^Dept ID"   int
);
GO

-- INSERT statements go here.
SET QUOTED_IDENTIFIER OFF;
GO
CREATE TABLE [^$Employee Data]
(
 [^First Name]   varchar(25) NOT NULL,
 [^Last Name]   varchar(25) NOT NULL,
 [^Dept ID]   int
);
GO
-- INSERT statements go here.

Po $Employee Data i ^$Employee Data utworzone tabele i wprowadzania danych, mogą być pobierane wiersze, jak pokazano poniżej:

SET QUOTED_IDENTIFIER ON;
GO
SELECT * 
FROM "$Employee Data"
SET QUOTED_IDENTIFIER OFF;
GO
-- Or
SELECT *
FROM [^$Employee Data]

W poniższym przykładzie tabela o nazwie table zawiera kolumny tablename, user, select, insert, update, i delete.Ponieważ tabela, SELECT, INSERT, UPDATE i DELETE są zastrzeżone, identyfikatory muszą rozdzielany co czas dostęp do obiektów.

SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE "table"
(
 tablename char(128) NOT NULL,
 "USER"    char(128) NOT NULL,
 "SELECT"  char(128) NOT NULL,
 "INSERT"  char(128) NOT NULL,
 "UPDATE"  char(128) NOT NULL,
 "DELETE"  char(128) NOT NULL
);
GO

Jeśli opcja Ustaw QUOTED_IDENTIFIER nie jest w tabela i kolumny nie są dostępne, chyba że używane są ograniczniki nawiasu.Na przykład:

SET QUOTED_IDENTIFIER OFF;
GO
SELECT * 
FROM "table";
GO

Oto zestaw wyników.:

Msg 170, Level 15, State 1
Line 1: Incorrect syntax near 'table'.

Następujące działa z powodu ograniczników nawias:

SET QUOTED_IDENTIFIER OFF;
GO
SELECT * 
FROM [table];
GO

Identyfikatory rozdzielającego z wielu części

Używając kwalifikowanych nazw obiektów, należy ograniczyć kilka identyfikatorów, które składają się z nazwą obiektu.Każdy identyfikator musi rozdzielany indywidualnie.Na przykład:

/* ISO quoted identifier syntax */
SELECT *
FROM "My DB"."My#UserID"."My.Table";
GO

Or

/* Transact-SQL bracketed identifier syntax */
/* Not available in SQL Server 6.5 or earlier */
SELECT *
FROM [My DB].[My#UserID].[My.Table];
GO

Brak niektórych specjalnych zasad dotyczących sposobu ograniczania nazw wieloczęściowe procedura składowana w instrukcja ODBC CALL.Aby uzyskać więcej informacji, zobacz Wywołanie procedury przechowywanej.

Używane identyfikatory jako parametry w programie SQL Server

Wiele procedury składowane w systemie, funkcje i instrukcje DBCC podjąć nazwy obiektów jako parametry.Niektóre z tych parametrów zaakceptować nazwy obiektu wieloczęściowe podczas innych polach akceptowane są tylko nazwy jednoczęściowe.Czy oczekiwano nazwę jednoczęściową lub wieloczęściowe Określa, jak analizować i używane wewnętrznie przez parametr SQL Server.

Jednoczęściowe nazwy parametrów

Jeśli parametr jest identyfikator Jednoczęściowa, można określić w następujący sposób:

  • Bez cudzysłowu lub ograniczników

  • Ujęte w pojedynczy cudzysłów

  • Ujęte w podwójny cudzysłów

  • Ujęty w nawiasy

Dla nazwy jednoczęściowe ciąg w pojedynczym cudzysłowie reprezentuje nazwę obiektu.Użycie ograniczników wewnątrz cudzysłowów pojedynczych znaków ogranicznika są traktowane jako część nazwy.

Jeśli nazwa zawiera okres lub inny znak, który nie jest częścią zestaw znaków zdefiniowanych dla standardowych identyfikatorów, należy ująć nazwę obiektu w pojedynczy cudzysłów, podwójne cudzysłowy lub nawiasy.

Nazwy parametrów wieloczęściowy

Wieloczęściowe nazwy są kwalifikowane nazwy, które zawierają bazę danych lub nazwy schematu, a także nazwę obiektu.Gdy wieloczęściowe nazwa jest używana jako parametr, SQL Server wymaga, że pełny ciąg składa wieloczęściową być ujęte w zestaw znaków cudzysłowu pojedynczego.

EXEC MyProcedure @name = 'dbo.Employees'

Jeśli nazwy poszczególnych części wymagają ograniczników, każda część nazwy powinny rozdzielane w oddzielnie stosownie do potrzeb.Na przykład jeśli część nazwa zawiera kropkę, podwójnego cudzysłowu lub lewy lub prawy nawias kwadratowy użyć nawiasy lub podwójnych cudzysłowów do rozdzielenia części.Całą nazwę ująć w pojedynczy cudzysłów.

Na przykład, nazwa tabela tab.one, zawiera okres.Aby zapobiec interpretowane jako nazwa trzech części, nazwa dbo.tab.one, ograniczyć part. Nazwa tabela

EXEC sp_help 'dbo.[tab.one]'

Poniższy przykład przedstawia tę samą nazwę tabela rozdzielany znakami cudzysłowu:

SET QUOTED_IDENTIFIER ON 
GO 
EXEC sp_help 'dbo."tab.one"'
GO