Sınırlandırılmış tanımlayıcıları (veritabanı altyapısı)

Tanımlayıcıları biçimi için tüm kuralları ile uyumlu bir tanımlayıcı veya sınırlayıcıları olmadan kullanılabilir.Normal tanımlayıcıları biçimi için kurallar ile uyumlu olmadığı 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ılardan normal için olan kurallara uymak zorunda tanımlayıcıları.

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

  • Ne zaman ayrılmış sözcükleri nesne adlarını veya nesne adları parçalarını için kullanılır.

    Ayrılmış anahtar sözcükleri nesne adları olarak kullanılmamalıdır.Veritabanları arasında daha önce yükseltilmiş sürüm, s SQL Server önceki ayrılmış sözcükleri içeren tanımlayıcıları içerebilir sürüm, ancak özel sözcükler için geçerli olan sürüm , SQL Server.Nesne için ad değiştirilebilir kadar sınırlandırılmış tanımlayıcıları kullanarak başvurabilirsiniz.

  • Listede bulunmayan karakterleri tam tanımlayıcılar olarak kullandığınızda.

    SQL Server kullanılacak geçerli kod sayfa herhangi bir karakter verir bir sınırlandırılmış tanımlayıcı.Ancak, nesne adı özel karakterler indiscriminate kullanımını sql deyimleri ve komut dosyaları okumak ve korumak zor hale getirebilir.Örneğin, bir tablo adı ile oluşturabilirsiniz Employee], burada sağ köşeli ayraç, bir bölümü adı.Bunu yapmak için sağ köşeli ayraç kullanarak iki daha fazla aşağıdaki gösterildiği gibi köşeli kaçış vardır:

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

Not

Sınırlayıcılar için yalnızca tanımlayıcılardır.Sınırlayıcılar ayrılmış olarak işaretlenmiş olsa bile, anahtar sözcükler için kullanılamaz SQL Server.

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

  • Çift tırnak işareti ('') tarafından teklif edilen tanımlayıcıları sınırlandırılmıştır:

    SELECT * FROM "Blanks in Table Name"
    
  • Tutucuda tanımlayıcıları köşeli ayraçlar ([]) tarafından sınırlandırılır:

    SELECT * FROM [Blanks In Table Name]
    

Teklif edilen tanımlayıcıları geçerli sadece QUOTED_IDENTIFIER seçeneği ise küme açık.Varsayılan olarak, Microsoft ole db Provider 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çenek olabilir küme iletişim kutusu.De Transact-SQL, seçenek, küme QUOTED_IDENTIFIER QUOTED_IDENTIFIER seçeneği kullanarak çeşitli düzeylerde ayarlanabilir alter database, veya kullanıcı seçenekleri seçeneği sp_configure.

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

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

    Varolan uygulamalarla uyumluluğu korumak için SQL Server tam olarak zorlayan bu kuralı.Dize uzunluğu bir tanımlayıcı, aşmıyorsa, karakter dizeleri çift tırnak işareti içine alınabilir.Bu yöntem önerilmez.

  • Tek tırnak işareti içine karakter dizelerinin kullanılması gerekir.Bunlar tanımlayıcıları sınırlandırmak için kullanılamaz.

    Yoksa karakter dize bir katıştırılmış tek tırnak işareti içeren 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'
    

Not

Sınırlandırılmış tanımlayıcıları izleyen boşluklar içeren bir nesnenin ve nesne adı adlandırma kullanılıyorsa, SQL Server depolar adı olmadan sondaki boşluk.

QUOTED_IDENTIFIER olduğunda küme için kapalı, SQL Server için tek ve çift tırnak işaretleri aşağıdaki kuralları kullanır:

  • Tırnak tanımlayıcıları sınırlandırmak için kullanılamaz.Bunun yerine, köşeli ayraç sınırlayıcıları kullanılmak üzere var.

  • Tek veya çift tırnak işaretleri içine karakter dizeleri için kullanılabilir.

    Çift tırnak işaretleri kullanılıyorsa, katıştırılmış tek tırnak işareti iki tek tırnak işareti tarafından belirtilen gerekmez.Örneğin:

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

Sınırlayıcılar köşeli ayraç içinde her zaman, QUOTED_IDENTIFIER ayarına bakılmaksızın kullanılabilir.

Sınırlandırılmış tanımlayıcıları için kurallar

Sınırlandırılmış tanımlayıcıları biçimi için kurallar şunlardır:

  • Sınırlandırılmış tanımlayıcıları normal tanımlayıcıları aynı sayıda karakter içerebilir.Bu 1 ile 128 karakter, sınırlayıcı karakterler de dahil olabilir.Yerel geçici tablo tanımlayıcıları maksimum 116 karakter olabilir.

  • Tanımlayıcı gövdesi sınırlandırma karakterleri kendileri dışında geçerli kod sayfa karakter herhangi bir bileşimini içerebilir.Örneğin, sınırlandırılmış tanımlayıcıları, boşluk, normal tanımlayıcılar için geçerli olan herhangi bir karakter ve şu karakterlerden herhangi birini içerebilir.

    tilde (~)

    tire (-)

    ünlem işareti (!)

    Sol kaşlı ayraç ({})

    yüzde (%)

    sağ küme parantezi (})

    şapka (^)

    kesme işareti (')

    ve işareti (&)

    nokta (.)

    sol ayraç (())

    ters eğik çizgi (\)

    sağ ayraç ())

    Aksan işareti (')

Aşağıdaki örnekler, tablo ve sütun adlarını için teklif edilen tanımlayıcıları kullanın.Sınırlandırılmış tanımlayıcıları belirlemek için her iki yöntem de 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 girilen veriler, satır alınan aşağıdaki gösterildiği gibi:

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

Aşağıdaki örnek, adlı bir tablo içinde table içeren sütunlar tablename, user, select, insert, update, ve delete.Ayrılmış anahtar sözcükleri tablo, select, INSERT, update ve delete olduğu için tanımlayıcıları virgülle ayrılmaları gerekir her saat nesnelere erişilen.

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

set QUOTED_IDENTIFIER seçeneği yoksa, tablo ve sütunlar, köşeli ayraç sınırlayıcıları kullanılmadığı sürece erişilemiyor.Örneğin:

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

Sonuç kümesi buradadır.:

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

Ayraç sınırlayıcıları nedeniyle aşağıdaki works:

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

Birden çok bölüme sahip sınırlandırma tanımlayıcıları

Nitelenmiş nesne adları kullanırken, birden çok nesnenin adını oluşturmak tanımlayıcıları sınırlandırmak zorunda kalabilirsiniz.Tek tek her tanımlayıcı ayrılmış olmalı.Ö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

Çok parçalı bir saklı yordam adlarında odbc call sınırlandırmak nasıl ile ilgili bazı özel kurallar vardır deyim.Daha fazla bilgi için bkz: Bir saklı yordam çağırma.

Parametre olarak sql Server tanımlayıcıları kullanarak

Pek çok sistem saklı yordamları, işlevleri ve dbcc deyimleri parametre olarak nesne adları gerçekleştirin.Diğerleri sadece tek parça adlar kabul ederken bu parametrelerden bazıları parçalı nesne adlarını kabul edin.Bir parametre nasıl ayrıştırılır ve dahili olarak kullanılan bir tek parça veya çok parçalı ad mı beklenir belirler SQL Server.

Parametre adları tek parça

Parametre bir tek parça tanımlayıcı ise, adı aşağıdaki şekillerde belirtilebilir:

  • Tırnak işaretleri veya sınırlayıcıları olmadan

  • Tek tırnak içinde

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

  • Parantezler içine

Tek parça adlar için tek tırnak içinde dize nesne adını temsil eder.Sınırlayıcı karakterler, tek tırnak işaretleri içinde ayırıcılar kullanılıyorsa, adının bir parçası kabul edilir.

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

Çok parçalı parametre adları

Çok parçalı veritabanı veya şema adı dahil tam adları ve ayrıca nesne adını adlarıdır.Çok parçalı ad bir parametre olarak kullanıldığında, SQL Server Tam dize kadar bir çok parçalı ad yapar, küme içine yerleştirilmesi gerekirtek tırnak işaretleri.

EXEC MyProcedure @name = 'dbo.Employees'

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

Örneğin, bir tablo adı tab.one, içeren bir dönem.Adı bir üç bölümlü adı olarak yorumlanmasını engellemek için dbo.tab.one, tablo adı kısmı sınırlandırmak

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