Identyfikatory rozdzielanego (aparat bazy danych)
Identyfikator obiektu, który jest zgodny z wszystkich reguł dla formatu identyfikatory mogą być używane z lub bez ograniczników.Identyfikator obiektu, który nie jest zgodne z zasadami dla formatu regularnych identyfikatory zawsze musi być rozdzielane.
Uwaga
Microsoft SQL Server nie rozpoznaje nazwy zmiennych i parametrów procedur przechowywanych, które są rozdzielane.Te typy identyfikatorów muszą być zgodne z regułami dla regularnych identyfikatory.
Identyfikatory rozdzielane są używane w następujących sytuacjach:
Kiedy słowa zastrzeżone są używane dla nazwy obiektu lub części nazw obiektów.
Zastrzeżonych słów kluczowych nie powinny być używane jako nazwy obiektu.Uaktualniony z wcześniejszych wersja baz danych SQL Server może zawierać identyfikatory, które zawierają słowa zarezerwowane nie w starszej wersja, ale która jest słowa zarezerwowane dla bieżącej wersja programu SQL Server. Do obiektu można odwołać się za pomocą identyfikatorów rozdzielanego, dopóki nie można zmienić nazwy.
W przypadku korzystania znaki, które nie są wyświetlane jako kwalifikowanych identyfikatorów.
SQL Server Umożliwia dowolny znak w bieżącej strona kodowa ma być użyty w polu identyfikator z ogranicznikami.Jednak niekontrolowane używanie znaków specjalnych w nazwie obiektu może utrudnić instrukcji SQL i skryptów do odczytywania i zarządzania nimi.Na przykład utworzyć tabela o nazwie Employee], gdzie zamykający nawias kwadratowy jest częścią nazwy. W tym celu trzeba escape nawias kwadratowy zamykający, za pomocą 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) );
Uwaga
Ograniczniki są tylko identyfikatory.Ograniczniki nie mogą być używane do słów kluczowych, nawet jeśli są oznaczone jako zarezerwowana w SQL Server.
Typy ograniczniki
Poniżej podano typy ograniczników używane w Transact-SQL:
Identyfikatorów w cudzysłowach są rozdzielane w podwójne cudzysłowy (""):
SELECT * FROM "Blanks in Table Name";
Identyfikatory bracketed są rozdzielone w nawiasach kwadratowych ([]):
SELECT * FROM [Blanks In Table Name];
Identyfikatory ujętego w cudzysłów są prawidłowe tylko wtedy, gdy opcja QUOTED_IDENTIFIER jest zestaw on.Domyślnie program Microsoft OLE DB dostawca for SQL Server i SQL Server Sterownik ODBC QUOTED_IDENTIFIER zestaw on podczas łączenia się.
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, opcja może być zestaw w oknie dialogowym. W Transact-SQL, zestaw opcję na różnych poziomach za pomocą QUOTED_IDENTIFIER zestaw, opcja QUOTED_IDENTIFIER ALTER DATABASE lub opcji Opcje użytkownika sp_configure.
Gdy jest QUOTED_IDENTIFIER zestaw on, SQL Serverzgodna z zasadami ISO użycie podwójnych cudzysłowów ("") i pojedynczy znak cudzysłowu (') w instrukcjach SQL. Na przykład:
Podwójny cudzysłów można używać tylko do rozdzielenia identyfikatorów.Nie można ich używać do ograniczania ciągów znaków.
Aby zachować zgodność z istniejącymi aplikacjami SQL Server nie wymusza pełni tę regułę. Ciągi znaków może być ujęte w podwójny cudzysłów, jeśli ciąg nie jest większa niż długość identyfikatora.Metoda ta nie jest zalecane.
Ciągi znaków, należy ująć muszą być używane znaki pojedynczego cudzysłowu.Nie można ich 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 znaku na początku znaku osadzony.Na przykład:
SELECT * FROM "My Table" WHERE "Last Name" = 'O''Brien';
Kiedy QUOTED_IDENTIFIER ma wartość OFF, SQL Server pojedyncze i podwójne cudzysłowy używa następujących zasad:
Nie można używać znaków cudzysłowu do rozdzielenia identyfikatorów.Zamiast tego nawiasy mają być używane jako ograniczniki.
Ciągi znaków, należy ująć można używać pojedynczych lub podwójnych cudzysłowów.
Jeśli używane są znaki cudzysłowu, osadzony znaki pojedynczego cudzysłowu nie mają być oznaczona dwa pojedyncze cudzysłowy.Na przykład:
SELECT * FROM [My Table] WHERE [Last Name] = "O'Brien";
Ograniczniki w nawiasach kwadratowych można zawsze używać, niezależnie od ustawienia QUOTED_IDENTIFIER.
Zasady rozdzielanego identyfikatory
Zasady w formacie rozdzielanym identyfikatory są następujące:
Identyfikatory rozdzielane mogą zawierać tę samą liczbę znaków, jako zwykły identyfikatorów.Może to być od 1 do 128 znaków, nie włącznie ze znakami ograniczników.Identyfikatory lokalnej tabela tymczasowa mogą być 116 znaków.
Jednostka identyfikatora mogą zawierać dowolną kombinację znaków w bieżącej strona kodowa, z wyjątkiem znaków ogranicznika sami.Na przykład identyfikatory rozdzielane mogą zawierać spacje, znaki prawidłowe identyfikatory regularnych i jeden z następujących znaków.
tyldy (~)
Łącznik (-)
wykrzyknik (!)
Lewy nawias klamrowy ({})
procent (%)
Prawy nawias klamrowy (})
daszek (^)
apostrof (')
handlowe i)&)
kropka (.)
Lewy nawias (())
kreski ułamkowej odwróconej (\)
Prawy nawias ())
znak diakrytyczny (')
Jeśli rozdzielany identyfikatory są używane podczas nadawania nazw obiektu i nazwa obiektu zawiera końcowe spacje SQL Server przechowuje nazwy zawierające spacje końcowe. Należy zauważyć, że semantyka, używane do porównywania nazw identyfikator taki sam, jak porównania ciągów.Dlatego końcowe spacje są ignorowane.Aby uniknąć problemów ze zgodnością w przyszłości, zaleca się jednak wziąć pod uwagę dowolny znak w obrębie ograniczników znacząca i stale odwołanie obiektu o nazwie jego identyfikator z ogranicznikami.
W następujących przykładach użyto identyfikatorów w cudzysłowach, nazwy tabel i nazw kolumn.Obie metody określania identyfikatory rozdzielane są wyświetlane w następujących czynności:
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 tabele są tworzone 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, a delete. Ponieważ tabela, SELECT, INSERT, UPDATE i DELETE zastrzeżonych słów kluczowych, identyfikatory musi być rozdzielane, za każdym razem, obiekty są dostępne.
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 QUOTED_IDENTIFIER zestaw nie jest ON w tabela i kolumn nie są dostępne, chyba że używane są ograniczniki nawiasu.Na przykład:
SET QUOTED_IDENTIFIER OFF;
GO
SELECT *
FROM "table";
GO
Here is the result set.:
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
Ogranicznik identyfikatory z wielu części
Używając kwalifikowanych nazw obiektów, należy określić więcej niż jednego z identyfikatorów, które składają się z nazwy obiektu.Każdy identyfikator musi być rozdzielane 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
Istnieją pewne specjalne zasady dotyczące sposobu ograniczania nazw wieloczęściowe procedura przechowywana w instrukcja ODBC CALL.Aby uzyskać więcej informacji zobaczWywołanie procedura przechowywana.
Za pomocą polecenia identyfikatory jako parametry w programie SQL Server
Wiele systemu przechowywane procedury, funkcji, i instrukcje DBCC podjąć nazw obiektów jako parametry.Niektóre z tych parametrów zaakceptować nazwy wieloczęściowe obiektu, podczas gdy inne osoby akceptować tylko nazwy jednoczęściowe.Czy Oczekiwano nazwy jednoczęściowe lub wieloczęściowe określa sposób parametru jest analizowany i używane wewnętrznie przez SQL Server.
Parametr nazwy jednoczęściowe
Jeśli parametr ma identyfikator jednoczęściowe, nazwy można określić w następujący sposób:
Bez znaków cudzysłowu lub ograniczników
Ujęte w pojedynczy cudzysłów
Ujęte w podwójny cudzysłów
Ujęte w nawiasy kwadratowe
Dla nazwy jednoczęściowe ciąg w pojedynczym cudzysłowie reprezentuje nazwę obiektu.Jeśli ograniczniki są używane w pojedyncze cudzysłowy, znaki ogranicznika są traktowane jako część nazwy.
Jeśli nazwa zawiera okres lub inny znak, który nie jest częścią zestaw znaków dla regularnych identyfikatorów, należy ująć nazwę obiektu w pojedynczy cudzysłów, podwójny cudzysłów lub nawiasy.
Wieloczęściowe nazwy parametru
Wieloczęściowe nazwy są kwalifikowane nazwy, które zawierają bazę danych lub nazwy schematu, a także nazwę obiektu.Jeżeli wieloczęściowe nazwa jest używana jako parametr SQL Server wymaga, czy pełną ciąg składający się z nazwy wieloczęściowe być ujęte w cudzysłów pojedynczy zestaw.
EXEC MyProcedure @name = 'dbo.Employees';
Jeśli nazwy poszczególnych części wymagają ograniczników, każda część nazwy powinny być rozdzielane oddzielnie stosownie do potrzeb.Na przykład jeśli część nazwa zawiera kropkę, podwójnego znaku cudzysłowu lub lewy lub prawy nawias kwadratowy użyć nawiasy lub podwójny cudzysłów do rozdzielenia części.Pełną nazwę ująć w znaki cudzysłowu pojedynczego.
Na przykład, nazwa tabela tab.one, zawiera znak kropki. Aby zapobiec interpretowane jako nazwa trzech części, nazwa dbo.tab.one, ograniczyć część nazwy tabela.
EXEC sp_help 'dbo.[tab.one]';
W poniższym przykładzie pokazano tę samą nazwę tabela oddzielany za pomocą podwójnych cudzysłowów:
SET QUOTED_IDENTIFIER ON;
GO
EXEC sp_help 'dbo."tab.one"';
GO
Historia zmian
Microsoft Learning |
---|
Poprawiono w instrukcja w obszarze „ reguły dla tekstu rozdzielanego identyfikatory"oznacza, że spacji końcowych są przechowywane z nazwami obiektów i dodaje najlepsze praktyki zalecenie podczas korzystania z rozdzielanego nazwy obiektów. |
See Also