Sınırlandırılmış tanımlayıcıları (Veritabanı Altyapısı)

Biçimi, tanıtıcıları için tüm kuralları ile uyumlu bir tanımlayıcı içeren veya içermeyen sınırlayıcılar kullanılabilir.Kurallarıyla normal tanımlayıcıların biçimi için uygun olmayan bir tanımlayıcı her zaman sınırlandırılmış gerekir.

Not

Microsoft SQL Server değişken adları ve sınırlandırılır saklı yordam parametreleri tanımıyor.Bu tür tanımlayıcıları normal kurallarına uymanız gerekir tanımlayıcılar.

Sınırlandırılmış tanımlayıcıları, aşağıdaki durumlarda kullanılır:

  • Nesne adlarını veya nesne adları parçalarını için özel amaçlı sözcükler ne zaman kullanılır.

    Ayrılmış anahtar sözcükleri, nesne adları kullanılmamalıdır.Uygulamasının önceki versiyonlarından yükseltme veritabanları SQL Server Önceki sürümde rezerve edilmemiş sözcükler içeren, ancak geçerli sürüm için ayrılmış sözcükleri olan tanıtıcılar içeriyor olabilir SQL Server. Adı değiştirilen kadar sınırlı tanımlayıcıları kullanarak nesneye başvurabilirsiniz.

  • Listelenmeyen bir karakter tam tanımlayıcılar kullandığınızda.

    SQL Server herhangi bir karakterle sınırlı bir tanımlayıcı olarak kullanılmak üzere geçerli kod sayfa sağlar.Ancak, nesne adı özel karakterler indiscriminate kullanımını SQL deyimleri ve komut dosyaları okuyup korumak zor hale getirebilir.Örneğin, bir tablo adıyla oluşturabilirsiniz Employee], köşeli ayraç adının bir parçası olduğu. Bunu yapmak için iki daha fazla aşağıdaki gösterildiği gibi köşeli kullanarak kapatma Köşeli ayracı çıkış vardır:

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

Not

Sınırlayıcı yalnızca tanımlayıcısı olarak kullanılır.Anahtar sözcük, sınırlayıcıları olarak rezerve edilen işaretlenmiş olsa bile kullanılamaz SQL Server.

Ayırıcılar türleri

Aşağıda, kullanılan sınırlayıcı türlerini verilmiştir. Transact-SQL:

  • Teklif edilen tanımlayıcıları, çift tırnak işareti ('') tarafından sınırlandırılır:

    SELECT * FROM "Blanks in Table Name";
    
  • Bracketed tanımlayıcıları, köşeli ayraçlar ([]) sınırlandırılmıştır:

    SELECT * FROM [Blanks In Table Name];
    

Teklif edilen tanıtıcıları yalnızca QUOTED_IDENTIFIER seçeneği olduğunda geçerlidir küme açık.Varsayılan olarak, Microsoft OLE DB sağlayıcı for SQL Server ve SQL Server ODBC sürücüsü küme QUOTED_IDENTIFIER bağlandıklarında açık.

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.Örneğin, SQL Server Management Studio, seçeneği olabilir küme bir iletişim kutusunda. Içinde Transact-SQL, seçeneği çeşitli düzeylerde küme QUOTED_IDENTIFIER, ALTER DATABASE QUOTED_IDENTIFIER seçeneğini veya sp_configure seçeneği kullanıcı seçenekleri kullanılarak ayarlanabilir.

QUOTED_IDENTIFIER olduğunda küme, açık SQL Serverçift tırnak işareti ('') kullanımını ve SQL deyimi tek tırnak işareti (') için ISO kuralları izler. Örneğin:

  • Çift tırnak işaretleri yalnızca tanımlayıcıları sınırlandırmak için kullanılır.Bunlar, karakter dizeleri sınırlamak için kullanılamaz.

    Varolan uygulamaların uyumluluğu korumak için SQL Server tam olarak bu kural zorlamaz. Karakter dize s çift tırnak, alınması dize tanımlayıcı uzunluğunu aşıyor.Bu yöntem önerilmez.

  • Karakter dizelerini içine, tek tırnak işaretleri kullanılmalıdır.Bunlar, tanıtıcıları sınırlandırmak için kullanılamaz.

    Karakter dizesi katıştırılmış bir tek tırnak işareti) içeriyorsa, bir katıştırılmış işareti önünde ek tek tırnak işareti eklemeniz gerekir.Örneğin:

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

QUOTED_IDENTIFIER ayarlandığında, KAPALı SQL Server Aşağıdaki kurallar, tek ve çift tırnak işareti kullanır:

  • Tırnak tanımlayıcıları sınırlandırmak için kullanılamaz.Bunun yerine, köşeli ayraçlar sınırlayıcı olarak kullanılması gerekir.

  • Tek veya çift tırnak, karakter dizeleri kapsamak için kullanılabilir.

    Çift tırnak işareti kullanılırsa, katıştırılmış tek tırnak işareti iki tek tırnak işareti tarafından gösterilen gerekmez.Örneğin:

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

Sınırlayıcılar içine her zaman, QUOTED_IDENTIFIER ayarına bakılmaksızın kullanılabilir.

Kurallar için sınırlandırılmış tanımlayıcıları

Biçimi sınırlandırılmış tanıtıcıları için kurallar şunlardır:

  • Ayrılmış tanımlayıcı normal tanımlayıcılar olarak aynı karakter sayısını içerir.Bu, 1 ile 128 karakter, sınırlayıcı karakterler de dahil olabilir.Yerel geçici tablo tanımlayıcıları, en çok 116 karakter olabilir.

  • Tanımlayıcı gövdesi dışındaki sınırlandırma karakteri kendilerini geçerli kod sayfa karakter birleşimini içerebilir.Örneğin, sınırlı tanımlayıcıları boşluk, normal tanımlayıcılar için geçerli olan herhangi bir karakter ve aşağıdaki karakterlerden herhangi birini içerebilir.

    tilde (~)

    tire (-)

    ünlem işareti (!)

    Sol kaşlı ayraç ({})

    yüzde (%)

    sağ kaşlı ayraç (})

    şapka işareti (^)

    kesme işareti (')

    ve işareti)&)

    nokta (.)

    sol ayraç ((.)

    ters eğik çizgi (\)

    Sağ parantez ())

    Aksan işareti (')

  • Sınırlandırılmış tanımlayıcıları, nesnenin ve nesne adını, sonunda bir boşluk içeriyorsa, kullanılıyorsa SQL Server sonunda boşluklar olan adını depolar. Tanımlayıcı adlar karşılaştırmak için kullanılan semantik dize karşılaştırmaları ile aynı olduğunu unutmayın.Bu nedenle, izleyen boşluklar göz ardı edilir.Ancak, gelecekte uyumluluk sorunlarını önlemek için , önemli olarak sınırlayıcı içinde herhangi bir karakter göz önünde bulundurun ve sürekli olarak sınırlandırılmış tanımlayıcı adı taşıyan nesneyi başvuru öneririz.

Aşağıdaki örnekler, tablo adları ve sütun adları için teklif edilen tanımlayıcıları kullanın.Her iki yöntem sınırlandırılmış tanımlayıcılarını belirtmek için aşağıdaki gösterilir:

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.

Sonra $Employee Data ve ^$Employee Data tabloları oluşturulur ve verilerin girileceğini, satır aşağıdaki gösterildiği gibi alınabilir:

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

Aşağıdaki örnekte, adlı bir tablo table sütun içerir. tablename, user, select, insert, update, ve delete. tablo, SELECT, INSERT, UPDATE ve DELETE ayrılmış anahtar olduğundan, her nesneleri erişilir tanımlayıcılar ayrılmış gerekir.

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

Seçeneği küme QUOTED_IDENTIFIER ON değilse, tablo ve sütunlar, ayraç sınırlayıcıları kullanılmadığı sürece erişilemiyor.Örneğin:

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

Aşağıdaki çalışır, ayraç ayırıcısını nedeniyle:

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

Birden çok bölümü içeren sınırlandırma tanımlayıcıları

Nitelenmiş nesne adları'nı kullanırken, birden çok nesne adı, tanıtıcıları sınırlandırmak gerekebilir.Her tanımlayıcı tek tek ayrılmış gerekir.Örneğin:

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

Ilgili ODBC CALL deyim çok parçalı bir saklı yordam adlarında nasıl göre ayırmak için özel bazı kurallar vardır.Daha fazla bilgi için bkz:Arayan bir saklı yordam.

SQL Server'da parametreler olarak tanımlayıcıları kullanarak

Birçok sistem saklı yordamları, işlevleri ve DBCC ifadeleri nesne adları parametre olarak alır.Diğerleri, yalnızca tek parça adlar kabul ederken bu parametrelerden bazıları çok parçalı bir nesne adları kabul edin.Tek bir bölümü ya da çok parçalı ad olup beklenen parametre ayrıştırıldı ve diğer tarafından dahili olarak kullanılan nasıl belirler SQL Server.

Tek-parça parametre adları

Bir tek parça tanımlayıcı parametresi, adı aşağıdaki şekillerde belirtilebilir:

  • Tırnak imleri sınırlayıcı isterse

  • Tek tırnak işaretleri içine alınmış

  • Çift tırnak işaretleri içine alınmış

  • Ayraç

Tek parça adlar için dizeyi tek tırnak işaretleri içindeki bir nesne adını temsil eder.Sınırlayıcılar tek tırnak işareti içinde kullanılırsa, sınırlayıcı karakterler adının bir parçası kabul edilir.

Adı, bir nokta ya da karakter kümesi bir parçası olan başka karakter kümesi kümesi içeriyorsa, küme normal tanımlayıcılar için tanımlanan, nesne adı tek tırnak işareti, çift tırnak işareti veya köşeli ayraçlar içine almalısınız.

Çok parçalı bir parametre adları

Çok parçalı veritabanı veya şema adı dahil tam adları ve nesne adını adlardır.Bir çok parçalı ad bir parametre olarak kullanıldığında SQL Server tek tırnak işareti kümesi içinde çok parçalı ad, tam dize içine alınması gerekir.

EXEC MyProcedure @name = 'dbo.Employees';

Tek ad bölümleri sınırlayıcıları gerektiriyorsa, her bölümü adı gerekli ayrı ayrı olarak ayrılmış.Örneğin, bir adı bölümü bir dönemi içeriyorsa, çift tırnak işareti veya sol veya sağ ayraç kullanın köşeli ayraç veya tırnak işareti bölümü sınırlandırmak için.Tam adı tek tırnak işaretleri içine alın.

Örneğin, tablo adı tab.one, bir nokta bulunduruyor. Ad üç bölümlü adı olarak yorumlanmasını engellemek için dbo.tab.one, tablo adı bölümü sınırlandırın.

EXEC sp_help 'dbo.[tab.one]';

Aşağıdaki örnek, aynı tablo adı çift tırnak işaretleri ile ayrılmış gösterir:

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

Değişiklik Geçmişi

Güncelleştirilmiş içerik

"Kural için sınırlı sonunda boşluk nesne adlarıyla depolanan ve nesne adları kullanırken en iyi yöntem öneri ayrılmış eklenen tanımlayıcıları" altında deyim düzeltildi.