Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ідентифікатори мови Transact - SQL




Ім'я об'єкту бази даних називається його ідентифікатором. Ідентифікатори в Microsoft SQL Server 2008 можуть привласнюватися будь-яким сутям: серверам, базам даних і їх об'єктам, наприклад таблицям, представленням, стовпцям, індексам, тригерам, процедурам, обмеженням і правилам. Для більшості об'єктів ідентифікатори потрібні, а для деяких, наприклад обмежень, необов'язкові.

Ідентифікатор об'єкту створюється при визначенні об'єкту. Потім ідентифікатор використовується для звернення до об'єкту.

Приклад 7.1. Наступна інструкція створює таблицю з ідентифікатором TableX і двома стовпцями з ідентифікаторами KeyCol і Description:

CREATE TABLE TableX

((KeyCol INT PRIMARY KEY, Description nvarchar(80))

Ця таблиця також містить безіменне обмеження. Обмеження PRIMARY KEY не має ідентифікатора.

Параметри сортування ідентифікатора залежать від рівня, для якого цей ідентифікатор визначений. До ідентифікаторів об'єктів рівня екземплярів, наприклад імен входу або імен баз даних, застосовуються параметри сортування, встановлені за умовчанням для екземпляра. Ідентифікаторам об'єктів в межах бази даних, наприклад таблиць, представлень або імен стовпців, призначаються параметри сортування, встановлені за умовчанням для бази даних. Наприклад, дві таблиці з іменами, що відрізняються тільки регістром, можуть бути створені в базі даних з параметрами сортування c обліком регістра, але не можуть бути створені в базі даних з параметрами сортування без урахування регістра.

Існує два класи ідентифікаторів: звичайні ідентифікатори і ідентифікатори з роздільником. Як звичайні ідентифікатори, так і ідентифікатори з роздільником можуть містити від 1 до 128 символів. Для локальних тимчасових таблиць ідентифікатор може містити не більше 116 символів.

Визначення 7.1. Звичайні ідентифікатори відповідають правилам форматування ідентифікаторів.

Правила форматування звичайних ідентифікаторів залежать від рівня сумісності бази даних. Цей рівень можна встановити за допомогою процедури ALTER DATABASE. При рівні сумісності, рівному 100, застосовуються наступні правила.

Першим символом має бути один з наступних:

· буква, визначена стандартом Юникод 3.2. Визначення букв в стандарті Юникод включають латинські символи від "a" до "z", від "A" до "Z", а також буквені символи інших мов;

· підкреслення (_), символ @ або грати (#).

Певні символи на початку ідентифікатора в SQL Server мають особливе значення. Звичайний ідентифікатор, що починається символом @, означає локальну змінну або параметр і не може використовуватися як ім'я об'єкту якого-небудь іншого типу. Ідентифікатор, що починається символом грат (#), означає тимчасову таблицю або процедуру. Ідентифікатор, що починається подвійним символом грат (##), означає глобальний тимчасовий об'єкт. Хоча символи грат і подвійних грат можуть використовуватися на початку імен об'єктів інших типів, не рекомендується такий спосіб іменування.

Деякі функції мови Transact - SQL мають імена, що починаються з подвійного символу "@" (@@). Щоб уникнути плутанини з цими функціями не слід використовувати імена, що починаються символами @@.

Наступні символи ідентифікаторів можуть включати:

· букви, визначені стандартом Юникод 3.2;

· десяткові цифри як з базового набору символів для латинського алфавіту, так і для будь-якого іншого національного алфавіту;

· символ @, знак долара ($), грати або підкреслення.

Ідентифікатор не може бути зарезервованим словом мови Transact - SQL. У сервері SQL Server застосовуються версії зарезервованих слів як верхнього, так і нижнього регістрів. Впроваджені символи пропуску або спеціальні символи не дозволені. Додаткові символи недопустимі.

Імена змінних, функцій і процедур, що зберігаються, повинні відповідати правилам для ідентифікаторів Transact - SQL.

Звичайні ідентифікатори не розділяються при використанні в інструкціях мови Transact - SQL.

Приклад 7.2. Використання звичайних ідентифікаторів:

SELECT *

FROM TableX

WHERE KeyCol = 124

Визначення 7.2. Ідентифікатори з роздільником полягають в подвійні лапки (") або квадратні дужки ([ ]).

Правила форматування для ідентифікаторів з роздільниками наступні:

Ідентифікатори з роздільниками можуть містити ту ж кількість символів, що і звичайні ідентифікатори. Це може бути від 1 до 128 символів, не включаючи символи-роздільники. Ідентифікатори локальних тимчасових таблиць можуть бути максимум 116 символів.

текст ідентифікатора може містити будь-яку комбінацію символів в поточній кодовій сторінці, окрім символів, що безпосередньо розмежовують.

Ідентифікатори з роздільниками можуть містити пропуски, будь-які символи, допустимі для звичайних ідентифікаторів, а також наступні символи: тильда (~), знак (!) оклику, знак відсотка (%), знак вставки (^), амперсанд (&), ліва кругла дужка (()права кругла дужка ()), дефіс (-), ліва фігурна дужка ({), права фігурна дужка (}), апостроф ('), точка (.), обернена коса риска (\), знак наголосу (').

Ідентифікатори з роздільниками використовуються в наступних ситуаціях:

при використанні зарезервованих слів для імен об'єктів або частин імен об'єктів. Зарезервовані ключові слова не можна використовувати як імена об'єкту. Бази даних, оновлені з більше ранніх версій SQL Server, можуть містити ідентифікатори із словами, які не були зарезервованими словами в колишній версії, але зарезервовані в SQL Server. Поки ім'я не буде змінено, можна посилатися на об'єкт за допомогою ідентифікаторів з роздільниками.

при використанні символів, які не перераховані як уточнені ідентифікатори. SQL Server дозволяє використовувати будь-який символ в поточній кодовій сторінці в ідентифікаторі з роздільником.

Ідентифікатори, не відповідні правилам формату звичайних ідентифікаторів, завжди необхідно використовувати з роздільниками.

Приклад 7.3. Використання ідентифікаторів з роздільником, невідповідних правилам форматування ідентифікаторів,:

SELECT *

FROM [My Table]

WHERE [order] = 10

Ідентифікатор, відповідний усім правилам формату ідентифікаторів, може використовуватися як з роздільниками, так і без них.

Приклад 7.4. Використання ідентифікаторів з роздільником, відповідних правилам форматування ідентифікаторів,:

SELECT *

FROM [TableX]

WHERE [KeyCol] = 124

Роздільники використовуються тільки для ідентифікаторів. Роздільники не можуть використовуватися для ключових слів, навіть якщо вони відмічені як зарезервовані в SQL Server.

Проте безладне використання спеціальних символів в імені об'єкту може зробити інструкції SQL і сценарії важкими для читання і обслуговування.

Приклад 7.5. Нехай необхідно створити таблицю з ім'ям Employee], де завершальна квадратна дужка є частиною імені. Щоб зробити це, необхідно екранувати завершальну квадратну дужку за допомогою двох квадратних дужок, як показано далі:

CREATE TABLE [Employee]]]

(

EmployeeID int IDENTITY (1,1) NOT NULL

FirstName varchar(30)

LastName varchar(30)

)

Поміщені в лапки ідентифікатори допустимі, тільки якщо параметр QUOTED_IDENTIFIER встановлений в ON. За умовчанням постачальник Microsoft OLE DB для SQL Server і драйвер ODBC SQL Server встановлюють параметр QUOTED_IDENTIFIER в стан ON при підключенні.

Незалежно від використовуваного інтерфейсу, окремі застосування або користувачі можуть змінити це налаштування в будь-який час. SQL Server забезпечує декілька способів для вказівки цього параметра. Наприклад, в середовищі SQL Server Management Studio параметр може бути встановлений в діалоговому вікні. У мові Transact - SQL параметр може бути встановлений на різних рівнях за допомогою інструкції SET QUOTED_IDENTIFIER, параметра QUOTED_IDENTIFIER інструкції ALTER DATABASE або аргументу user options процедури sp_configure.

Коли параметр QUOTED_IDENTIFIER рівний ON, додаток SQL Server наслідує правила ISO по використанню подвійних лапок (") і поодинокої лапки (') в інструкціях SQL:

Подвійні лапки можуть використовуватися тільки для виділення ідентифікаторів. Вони не можуть використовуватися для виділення рядків символів. Щоб забезпечити сумісність з існуючими застосуваннями, SQL Server не повністю дотримується цього правила. Рядки символів можуть бути поміщені в подвійні лапки, якщо рядок не перевищує довжину ідентифікатора. Не рекомендується використовувати цю можливість.

Поодинокі лапки повинні використовуватися для ув'язнення в них рядків символів. Вони не можуть використовуватися для виділення ідентифікаторів. Якщо рядок символів містить впроваджену поодиноку лапку, необхідно вставити додаткову поодиноку лапку перед впровадженою лапкою.

Приклад 7.6. Використання поодинокої лапки в рядку символів при значенні параметра QUOTED_IDENTIFIER встановленого в ON:

SELECT * FROM "My Table"

WHERE "Last Name" = 'O''Brien'

Якщо ідентифікатори з роздільниками використовуються при привласненні імені об'єкту і ім'я об'єкту містить кінцеві пропуски, SQL Server збереже ім'я без кінцевих пропусків.

Якщо параметр QUOTED_IDENTIFIER встановлений в OFF, SQL Server використовує наступні правила для поодиноких і подвійних лапок:

Лапки не можуть використовуватися для виділення ідентифікаторів. Замість цього як роздільники повинні використовуватися дужки.

Одинарні або подвійні лапки можуть використовуватися для ув'язнення в них рядків символів.

Якщо використовуються подвійні лапки, впроваджені поодинокі лапки не мають бути позначені двома поодинокими лапками.

Приклад 7.7. Використання поодинокої лапки в рядку символів при значенні параметра QUOTED_IDENTIFIER встановленого в OFF:

SELECT * FROM [My Table]

WHERE [Last Name] = "O'Brien"

Приклад 7.8. Два способи вказівки ідентифікаторів з роздільниками - за допомогою лапок і квадратних дужок:

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

 

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

Після того, як таблиці $Employee Data і ^$Employee Data будуть створені і дані введені, рядки можуть бути витягнуті, як показано в прикладі 7.9.

Приклад 7.9. Вибірка рядків з таблиць, імена яких задані ідентифікаторами з роздільниками (за допомогою лапок і квадратних дужок):

SET QUOTED_IDENTIFIER ON;

GO

SELECT *

FROM "$Employee Data"

SET QUOTED_IDENTIFIER OFF;

GO

SELECT *

FROM [$Employee Data]

Приклад 7.10. Таблиця на ім'я table містить стовпці tablename, user, select, insert, update і delete. Оскільки TABLE, SELECT, INSERT, UPDATE і DELETE - це зарезервовані ключові слова, ідентифікатори мають бути поміщені в символи-роздільники при кожному зверненні до об'єкту.

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 не встановлений в стан ON, до таблиці і стовпців не можна звернутися, якщо не використовувати роздільники-дужки.

Приклад 7.11. Для наступного запиту, в якому є присутній ідентифікатор з роздільником у вигляді лапок,:

SET QUOTED_IDENTIFIER OFF;

GO

SELECT *

FROM "table";

GO

Буде виданий результат:

Msg 170, Level 15, State 1

Line 1: Incorrect syntax near 'table'.

Приклад 7.12. Наступний запит працюватиме із-за використання роздільників-дужок:

SET QUOTED_IDENTIFIER OFF;

GO

SELECT *

FROM [table];

GO

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 711; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.061 сек.