Основи Transact-SQL

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення

Інформація про роботу

Рік:
2009
Тип роботи:
Інші
Предмет:
Бази даних
Група:
К

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Основи Transact-SQL М Е Т О Д И Ч Н І В К А З І В К И до виконання лабораторних робіт з дисципліни “Бази даних” для студентів базового напрямку "Програмна інженерія" Затверджено на засіданні кафедри програмного забезпечення. Протокол № ___ від ______ 2009 р. Львів-2009 Основи Transact-SQL: Методичні вказівки до виконання лабораторних робіт з дисципліни “Бази даних” для студентів базового напрямку “Програмна інженерія” / Укл.: Н.Я. Павич, Р. Б. Тушницький. – Львів: Видавництво Національного університету “Львівська політехніка”, 2009. – 68 с. Укладачі Павич Н.Я., канд. техн. наук, доц., Тушницький Р.Б., асист. Відповідальний за випуск Левус Є.В., канд. техн. наук, доц. Рецензенти Мельник Р.А., д-р. техн. наук, проф., Іванців Р.Д., канд. техн. наук, доц. Вступ Методичні вказівки містять теоретичні відомості стосовно основ Transact-SQL, його основних елементів, базових функцій, процедур та представлень для управління базами даних та запитами до Microsoft SQL Server, контрольні запитання та завдання до лабораторних занять. Метою виконання лабораторних завдань студентами є освоєння нової мови запитів Transact-SQL, в той же час поглиблення знань з фундаментальних понять баз даних, керування ними та їх адміністрування. Методичні вказівки забезпечують вивчення вступного курсу до управління серверами баз даних і рекомендуються для початківців у цій галузі. Назви службових слів для наглядного сприйняття текстів виділено жирним шрифтом. Лабораторна робота № 1 Тема. Ознайомлення із мовою Transact-SQL. Мета. Навчитися використовувати T-SQL, DML та транзакції для зміни даних та управління запитами в SQL Server 2008. Теоретичні відомості. Microsoft SQL Server − комерційна система керування базами даних, що розповсюджується корпорацією Microsoft. Мова, що використовується для запитів − Transact-SQL (T-SQL), створена спільно Microsoft та Sybase. Transact-SQL є реалізацією стандарту ANSI/ISO щодо структурованої мови запитів (SQL) із розширеннями. Використовується як для невеликих і середніх за розміром баз даних, так і для великих баз даних масштабу підприємства. Багато років вдало конкурує з іншими системами керування базами даних. 1. Елементи Transact-SQL. Мова Transact-SQL є ключем до використання SQL Server. Всі застосування, що взаємодіють із екземпляром SQL Server, незалежно від їх користувацького інтерфейсу відправляють серверу інструкції Transact-SQL. Список застосувань, які можуть формувати код Transact-SQL: Стандартні офісні застосування для підвищення продуктивності праці. Застосування, що використовують графічний інтерфейс, за допомогою якого користувачі вибирають таблиці і стовпчики для перегляду. Застосування, що використовують пропозицію природньої мови для визначення необхідних користувачу даних. Бізнес-застосування, що зберігають дані в базах даних SQL Server. В їх число входять як застосування, написані постачальниками ПЗ, так і застосування, створені всередині компанії. Сценарії Transact-SQL, що запускаються за допомогою таких програм, як sqlcmd. Застосування, створені за допомогою систем розробки, таких як Microsoft Visual C++, Microsoft Visual Basic або Microsoft Visual J++, які використовують API-інтерфейси баз даних, наприклад ADO, OLE DB і ODBC. Веб-сторінки, які отримують дані з баз даних SQL Server. Розподілені системи баз даних, з яких дані SQL Server реплікуються в різні бази даних або до яких виконуються розподілені запити. Сховища даних, в яких дані витягуються з систем оперативної обробки транзакцій (OLTP), а потім узагальнюються для аналізу підтримки прийняття рішень. У Transact-SQL є декілька елементів, які використовуються більшістю інструкцій. Таблиця 1 містить відомості про основні елементи Transact-SQL. Таблиця 1 Основні елементи Transact-SQL Елемент Transact-SQL Опис  Ідентифікатори Імена таких об’єктів, як таблиці, представлення, стовпці, бази даних та сервери.  Типи даних Задають типи даних, що містяться в таких об’єктах, як стовпці, змінні і параметри. Більшість інструкцій Transact-SQL не звертаються до типів даних безпосередньо, проте результати їх виконання залежать від взаємодії типів даних об’єктів, на які вони посилаються.  Константи Символи, що представляють певні типи даних.  Фукнціі Елементи синтаксису, що мають будь-яку кількість вхідних значень і повертають скалярне значення або безліч табличних значень. Наприклад, функція SUM здійснює підсумовування декількох значень, функція DATEDIFF визначає тимчасову різницю між двома датами, функція @@SERVERNAME повертає ім’я екземпляра Microsoft SQL Server, функція OPENQUERY виконує інструкцію Transact-SQL на віддаленому сервері і отримує результуючий набір.  Вирази Одиниці синтаксису, які можуть бути перетворені компонентом SQL Server в окремі значення.  Використання операторів у висловах Завдання, що містить не менше одного простого виразу, що використовується для побудови більш складного виразу. Наприклад, знак множення (*) у виразі «PriceColumn * 1.1» збільшує ціну на 10%.  Коментарі Шматки тексту, що поміщаються в інструкції Transact-SQL, з метою пояснення виконуваних ними дій. Коментарі в SQL Server не виконуються.  Зарезервовані ключові слова Слова, зарезервовані для застосування в SQL Server, які не можуть бути використані як імена об’єктів бази даних.  1.1. Ідентифікатори. Ім’я об’єкта бази даних називається його ідентифікатором. Ідентифікатори в Microsoft SQL Server можуть привласнюватися будь-яким сутностям: серверам, базам даних та їх об’єктам (таблиці, представлення, стовпці, індекси, тригери, процедури, обмеження, правила). Для більшості об’єктів ідентифікатори необхідні, а для деяких, наприклад обмеження, є необов’язкові. Ідентифікатор об’єкта створюється при визначенні об’єкта. Потім ідентифікатор використовується для звернення до об’єкта. Наприклад, така інструкція створює таблицю з ідентифікатором TableX і двома стовпчиками з ідентифікаторами KeyCol і Description: CREATE TABLE TableX (KeyCol INT PRIMARY KEY, Description nvarchar (80)) Ця таблиця також містить безіменне обмеження PRIMARY KEY, яке не має ідентифікатора. Параметри сортування ідентифікатора залежать від рівня, для якого цей ідентифікатор визначений. До ідентифікаторів об’єктів рівня екземплярів, наприклад імен входу або імен баз даних, застосовуються параметри сортування, встановлені за замовчуванням для екземпляра. Ідентифікаторам об’єктів в межах бази даних, наприклад таблиць, представлень або імена стовпчиків, призначаються параметри сортування, встановлені за замовчуванням для бази даних. Наприклад, дві таблиці з іменами, що відрізняються тільки регістром, можуть бути створені в базі даних з параметрами сортування c урахуванням регістра, але не можуть бути створені в базі даних з параметрами сортування без урахування регістру. Існує два класи ідентифікаторів: звичайні інедтифікатори та ідентифікатори із роздільником. Звичайні ідентифікатори відповідають правилам форматування ідентифікаторів. Вони не розділяються при використанні в інструкціях мови Transact-SQL. SELECT * FROM TableX WHERE KeyCol = 124 Ідентифікатори з роздільником записують у подвійних лапках (") або квадратних дужках ([]). Ідентифікатори, які відповідають правилам форматування ідентифікаторів, можуть бути не розділеними. Наприклад: SELECT * FROM [TableX] -- Роздільник є опціональним. WHERE [KeyCol] = 124 -- Роздільник є опціональним. Ідентифікатори, які не відповідають всім правилам для ідентифікаторів, в інструкції мови Transact-SQL повинні бути розділені. Наприклад: SELECT * FROM [My Table] -- Ідентифікатор містить пробіл і -- використовує зарезервоване слово. WHERE [order] = 10 -- Ідентифікатор є зарезервованим словом. І звичайні ідентифікатори, і ідентифікатори з роздільником можуть містити від 1 до 128 символів. Для локальних тимчасових таблиць ідентифікатор може містити не більше 116 символів. Правила форматування звичайних ідентифікаторів залежать від рівня сумісності бази даних. Цей рівень можна встановити за допомогою процедури ALTER DATABASE. При рівні сумісності, що дорівнює 100, застосовуються такі правила: 1. Першим символом має бути один з наступних: Буква, визначена стандартом Юнікод 3.2. Визначення букв у стандарті Юнікод включають латинські символи від «a» до «z», від «A» до «Z», а також літери-символи інших мов; Підкреслення (_), символ @ або решітка (#). Певні символи на початку ідентифікатора в SQL Server мають особливе значення. Звичайний ідентифікатор, що починається символом @, означає локальну змінну або параметр і не може використовуватися як ім’я об’єкта будь-якого іншого типу. Ідентифікатор, що починається символом решітки (#), означає тимчасову таблицю або процедуру. Ідентифікатор, що починається подвійним символом решітки (##), означає глобальний тимчасовий об’єкт. Хоча символи решітки та подвійної решітки можуть використовуватися на початку імен об’єктів інших типів, не рекомендується такий спосіб іменування. Деякі функції мови Transact-SQL мають імена, що починаються з подвійного символу «@» (@@). Тому не слід використовувати імена, що починаються символами @@. 2. Наступні символи можуть включати: Букви, визначені стандартом Юнікод 3.2; Десяткові цифри як з базового набору символів для латинського алфавіту, так і для будь-якого іншого національного алфавіту; Символ @, знак долара ($), решітку або підкреслення. 3. Ідентифікатор не може бути зарезервованим словом мови Transact-SQL. У сервері SQL Server застосовуються версії зарезервованих слів як верхнього, так і нижнього регістрів. 4. Вбудовані символи пробілу або спеціальні символи не дозволені. 5. Додаткові символи недопустимі. Якщо в інструкціях мови Transact-SQL ідентифікатори використовуються ідентифікатори, які не відповідають цим правилам, то вони повинні бути вкладені в подвійні лапки або квадратні дужки. Імена змінних, функцій і збережених процедур повинні відповідати правилам для ідентифікаторів Transact-SQL. 1.2. Використання ідентифікаторів як імена об’єктів. Повне ім’я об’єкта складається з чотирьох ідентифікаторів: імені сервера, імені бази даних, імені схеми та імені об’єкта, які відображаються в такому форматі: ім’я_сервера . [ім’я_бази_даних] . [ім’я_схеми] . ім’я_об’єкта | ім’я_бази_данних . [ім’я_схеми] . ім’я_об’єкта | ім’я_схеми . ім’я_об’єкта | ім’я_об’єкта Імена сервера, бази даних і власника називаються кваліфікаторами імені об’єкта. Посилаючись на об’єкт, немає необхідності вказувати сервер, базу даних і власника. Кваліфікатори можуть бути опущені, відзначаючи їх позиції точками. Далі перераховані допустимі формати імен об’єктів: ім’я_сервера . ім’я_бази_даних . ім’я_схеми . ім’я_об’єкта ім’я_сервера . ім’я_бази_даних .. ім’я_об’єкта ім’я_сервера .. ім’я_схеми . ім’я_об’єкта ім’я_сервера ... ім’я_об’єкта ім’я_бази_даних . ім’я_схеми . ім’я_об’єкта ім’я_бази_даних .. ім’я_об’єкта ім’я_схеми . ім’я_об’єкта ім’я_об’єкта Назва об’єкта, що включає всі чотири частини, називається повним ім’ям. Кожен об’єкт, який створюється в Microsoft SQL Server, повинен мати унікальне повне ім’я. Наприклад, в одній і тій же базі даних може міститися дві таблиці з ім’ям abc, якщо вони мають різних власників. Більшість посилань на об’єкти використовують трикомпонентні імена. За замовчуванням в якості ім’я_сервера використовується локальний сервер. За замовчуванням в якості ім’я_бази_даних використовується поточна база даних з’єднання. Для ім’я_схеми за замовчуванням використовується схема за замовчуванням користувача, що відправляє запит. Якщо в явному вигляді не були задані інші налаштування, для нових користувачів схемою за замовчуванням стає схема dbo. Чотирьохкомпонентні імена зазвичай використовуються в розподілених запитах і віддалених викликах збережених процедур. Вони використовують такий вигляд: зв’язаний_сервер . каталог . схема . ім’я_об’єкта В таблиці 2 приведено частини імені та їх опис. Таблиця 2 Частини імені та їх опис Частина імені Опис  Зв’язаний_сервер Ім’я зв’язаного сервера, що містить об’єкт, на який посилається розподілений запит.  каталог Назва теки, що містить об’єкт, на який посилається розподілений запит. При запитах до бази даних SQL Server каталогом є ім’я бази даних.  схема Ім’я схеми, що містить об’єкт, на який посилається розподілений запит.  ім’я_об’єкта Назва об’єкта або ім’я таблиці.   У розподілених запитах ім’я сервера в чотирьохкомпонентному імені відповідає пов’язаному серверу. Зв’язаний сервер − це ім’я сервера, що визначається за допомогою збереженої процедури sp_addlinkedserver. Зв’язаний сервер визначає постачальника OLE DB і джерело даних OLE DB, який може повернути набір записів, які використовуються Microsoft SQL Server в якості частини інструкції Transact-SQL. Щоб визначити, які компоненти джерела даних OLE DB використовуються для імені каталогу та імені схеми в повному імені, перегляньте документацію постачальника OLE DB, вказану для пов’язаного сервера. Якщо на зв’язаному сервері запущений екземпляр SQL Server, то ім’ям каталогу є база даних, що містить об’єкт, а іменем схеми − власник об’єкта. У віддалених викликах процедур ім’я сервера в чотирьохкомпонентному імені вказує на віддалений сервер. Віддалений сервер, заданий за допомогою збереженої процедури sp_addserver, є екземпляром SQL Server, доступ до якого здійснюється через локальний сервер. Виконуйте процедури, що зберігаються на віддаленому сервері, використовуючи такий формат імені процедури: сервер . база_даних . ім’я_схеми . процедура Для віддаленої збереженої процедури потрібні всі чотири частини імені. Для посилання на стовпці з використанням ідентифікаторів імена стовпців повинні бути унікальні в межах таблиці або представлення. Можна використовувати до трьох префіксів для вказівки стовпців у запиті, що звертається до таблиць, які мають стовпчики з одним і тим же ім’ям. Допустимі будь-які з таких форматів: ім’я_бази_даних . ім’я_схеми . ім’я_об’єкта . ім’я_стовпчика ім’я_бази_даних .. ім’я_об’єкта . ім’я_стовпчика ім’я_схеми . ім’я_об’єкта . ім’я_стовпчика ім’я_об’єкта . ім’я_стовпчика Для звернення до властивостей стовпців визначих користувацьким типом можна використовувати крапку (.) в якості роздільника між ім’ям стовпця і іменем властивості. При зверненні до імен властивостей можна також звертатися до ідентифікаторів таблиць або представлень, але не до ідентифікаторів баз даних або схем. Можливі наступні формати: ім’я_стовпця . ім’я_властивості1 . ім’я_властивості2 [...] ім’я_об’єкта . ім’я_стовпця . ім’я_властивості1 . ім’я_властивості2 [...] 1.3. Типи даних. З об’єктом, що містить дані, пов’язаний тип, що визначає види даних, які можуть зберігатися в об’єкті, наприклад символи, цілі числа або двійкові дані. Типи даних мають наступні об’єкти: Стовпці таблиць і представлень. Параметри збережених процедур. Змінні. Функції Transact-SQL, що повертають одне або кілька значень конкретного типу даних. Збережені процедури, які повертають значення. Це значення завжди має тип integer. При призначенні типу даних об’єкту визначаються чотири атрибути об’єкта: Вид даних, що містяться в об’єкті. Розмір або довжина значення, що зберігається об’єктом. Точність числа (тільки у випадку числових типів). Масштаб числа (тільки у випадку числових типів). Таблиця 3 містить типи даних, які включає мова Transact-SQL. Таблиця 3 Типи даних в мові Transact-SQL bigint binary bit  char CLR cursor  date datetime datetime2  datetimeoffset decimal float  hierarchyid image int  money nchar ntext  numeric nvarchar real  rowversion smalldatetime smallint  smallmoney sql_variant table  text time timestamp  varbinary varchar uniqueidentifier  int, bigint, smallint, tinyint (Transact-SQL) xml (Transact-SQL)   int, bigint, smallint і tinyint (Transact-SQL) − типи точних числових даних, що використовують цілі числа. Їх характеристики зведено у таблицю 4. Таблиця 4 Характеристики int, bigint, smallint і tinyint Тип даних Діапазон Сховище  bigint від -263 (-9 223 372 036 854 775 808) до 263-1 (9 223 372 036 854 775 807) 8 байт  int від -231 (-2 147 483 648) до 231-1 (2 147 483 647) 4 байта  smallint від -215 (-32 768) до 215-1 (32 767) 2 байта  tinyint від 0 до 255 1 байт   Тип даних int є основним типом цілочисельних даних в SQL Server. Тип даних bigint використовується для зберігання значень, що виходять за діапазон, підтримуваний типом даних int. У таблиці пріоритетів типів даних тип bigint розташований між smallmoney і int. Функції повертають значення типу bigint тільки в тому випадку, коли параметр виразу також має тип bigint. У SQL Server не передбачено автоматичного перетворення інших типів цілочисельних даних (tinyint, smallint і int) у значення типу bigint. binary і varbinary − типи двійкових даних фіксованої або змінної довжини. binary [(n)] − двійкові дані фіксованої довжини розміром в n байт, де n − значення від 1 до 8000. Розмір зберігання становить n байт. varbinary [(n | max)] − двійкові дані змінної довжини. n можуть мати значення від 1 до 8000; max означає максимальну довжину зберігання, яка становить 231-1 байт. Розмір зберігання − це фактична довжина введених даних плюс 2 байти. Введені дані можуть мати розмір 0 символів. Якщо значення n при визначенні даних або в інструкції оголошення змінної не вказано, довжина за замовчуванням дорівнює 1. Якщо значення n не вказано у функції CAST, довжина за замовчуванням дорівнює 30. Тип binary застосовується в тих випадках, коли розмір даних у стовпці піддається попередній оцінці. Якщо ж розмір даних у стовпці заздалегідь визначити важко, користуйтеся типом varbinary. Якщо елементи даних у стовпці перевищують у довжину 8000 байт, користуйтеся типом даних varbinary(max). bit − цілочисельний тип даних, який може приймати значення 1, 0 або NULL. Компонент SQL Server Database Engine оптимізує зберігання стовпців типу bit. Якщо в таблиці є 8 або менше стовпців типу bit, вони зберігаються як 1 байт. Якщо є від 9 до 16 стовпців типу bit, вони зберігаються як 2 байта і т.д. Рядкові значення TRUE і FALSE можна перетворити на значення типу bit: TRUE перетворюється в 1, а FALSE − в 0. char і varchar − є символьними типами даних фіксованої або змінної довжини. char [(n)] − символьні дані фіксованої довжини, не в Юнікоді, з довжиною n байт. Значення n має знаходитися в інтервалі від 1 до 8000. Розмір зберігання даних цього типу дорівнює n байт. varchar [(n | max)] − символьні дані змінної довжини, не в Юнікоді. n може мати значення від 1 до 8 000. max означає, що максимальний розмір зберігання дорівнює 231-1 байт. Розмір зберігання дорівнює фактичній довжині даних плюс два байти. Введені дані можуть мати довжину 0 символів. Якщо n не задається у визначенні даних або в інструкції оголошення змінної, довжина за замовчуванням дорівнює 1. Якщо при використанні функцій CAST і CONVERT n не задається, довжина за замовчуванням дорівнює 30. Об’єктам, що використовують тип char або varchar, призначаються параметри сортування за замовчуванням бази даних, якщо тільки не встановлено спеціальний режим за допомогою інструкції COLLATE. Параметри сортування контролюють кодову сторінку, яка використовується для збереження символьних даних. Якщо є вузли, що підтримують декілька мов, то для зменшення проблем, пов’язаних з перетворенням символів, можна використовувати типи даних Юнікоду nchar або nvarchar. Якщо використовується тип char або varchar, рекомендується наступний підхід. Якщо розміри записів даних стовпців постійні, використовуйте char. Якщо розміри записів даних стовпців значно змінюються, використовуйте varchar. Якщо розміри записів даних стовпців значно змінюються і розмір може перевищити 8 000 байт, використовуйте varchar (max). Якщо SET ANSI_PADDING рівне OFF при виконанні CREATE TABLE або ALTER TABLE, стовпець char, визначений як NULL, обробляється як varchar. Якщо кодова сторінка параметрів сортування використовує бвобайтові символи, розмір зберігання залишається рівним n байт. Залежно від символьного рядка для зберігання n символів може знадобитися менше n байт. CLR − типи даних SQL Server в платформі .NET Framework. Бібліотека SqlTypes являє собою частину бібліотеки базового класу платформи Microsoft .NET Framework. Вона надає типи даних з тією ж семантикою і тією ж точністю, як ті, що доступні в базі даних SQL Server. Типи реалізовані в просторі імен System.Data.SqlTypes, включеному до бібліотеки System.Data. cursor − тип даних для змінних або вихідних параметрів збережених процедур, які містять посилання на курсор. Будь-яка змінна, створена з типом даних cursor, може приймати значення NULL. Операції, які можуть працювати над змінними і параметрами, що мають тип даних cursor: Інструкції DECLARE @ local_variable та SET @ local_variable. Інструкції над курсором OPEN, FETCH, CLOSE і DEALLOCATE. Вихідні параметри збереженої процедури. Функція CURSOR_STATUS. Системні збережені процедури sp_describe_cursor_columns, sp_cursor_list, sp_describe_cursor і sp_describe_cursor_tables. Зауваження. Тип даних cursor не може бути використаний для стовпців в операторі CREATE TABLE. У версії SQL Server 2008 вихідний стовпець cursor_name процедур sp_cursor_list і sp_describe_cursor повертає ім’я змінної курсору. У попередніх версіях цей вихідний стовпець повертає ім’я, сформований системою. date, datetime, datetime2, datetimeoffset, smalldatetime, time, timestamp − функції для роботи із датою та часом (будуть детально розглянуті далі). decimal, numeric − типи числових даних з фіксованими точністю і масштабом. decimal [(p [, s])] і numeric [(p [, s])] − числа з фіксованою точністю і масштабом. При використанні максимальної точності числа можуть приймати значення в діапазоні від -1038+1 до 1038-1. У стандарті ISO синонімом типу decimal є типи dec і dec(p, s). Тип numeric функціонально рівнозначний типу decimal. p (точність) − максимальна кількість десяткових розрядів числа (як зліва, так і праворуч від десяткової коми). Точність повинна приймати значення від 1 до 38. За замовчуванням для точності приймається значення 18. s (масштаб) − максимальна кількість десяткових розрядів числа праворуч від десяткової коми. Масштаб може приймати значення від 0 до p. Масштаб може бути зазначений тільки спільно з точністю. За замовчуванням масштаб приймає значення 0, тому 0 <= s <= p. Максимальний розмір сховища залежить від точності. В таблиці 5 приведено характеристики точності та об’єм в байтах для її зберігання. Таблиця 5 Характеристики точності Точність Байти сховища  1-9 5  10-19 9  20-28 13  29-38 17   float, real − типи приблизних числових даних, що використовуються для числових даних з плаваючою комою. Дані з плаваючою комою є приблизними, тому не всі значення з діапазону можуть бути відображені точно. Типу real відповідає в ISO тип float(24). В таблиці 6 приведено характеристики типів даних float та real. Таблиця 6 Характеристики float та real Тип даних Діапазон Зберігання  float -1,79E+308 — -2,23E-308, 0 і 2,23E-308 — 1,79E+308 Залежить від значення n  real - 3,40E + 38 — -1,18E - 38, 0 і 1,18E - 38 — 3,40E + 38 4 байта  float [(n)], де n − кількість бітів, які використовуються для зберігання мантиси числа у форматі float при експоненційному поданні. Визначає точність даних і розмір для зберігання. Значення параметра n має лежати в межах від 1 до 53. Значення за замовчуванням для параметра n є 53. В таблиці 7 приведено характеристики точності даного типу даних. Таблиця 7 Характеристики точності n Точність Байти сховища  1-24 7 знаків 4  25-53 15 знаків 8   У застосуванні SQL Server параметр n може приймати одне з двох можливих значень. Якщо 1 <= n <= 24, то параметр n приймає значення 24. Якщо 25 <= n <= 53, то параметр n приймає значення 53. Тип даних SQL Server float [(n)] відповідає стандарту ISO для всіх значень n в діапазоні від 1 до 53. Синонімом типу даних double precision є тип float(53). ntext, text, image − в майбутній версії Microsoft SQL Server будуть видалені. Слід уникати їх використання при розробці нових програм. Замість цих типів даних потрібно використовувати типи nvarchar (max), varchar (max) і varbinary (max). Ці типи даних фіксованої і змінної довжини призначені для збереження символьних і двійкових даних у форматі Юнікод та інших форматах. Дані у форматі Юнікод представляються символами кодування UNICODE UCS-2. ntext − цей тип даних являє символьні дані в Юникоді змінної довжини, що включають до 230- 1 (1 073 741 823) символів. Обсяг займаного цим типом простору (в байтах) у два рази перевищує число символів. text − цей тип даних представляє дані, відмінні від даних Юнікод, подані з використанням кодової сторінки сервера. Максимальна довжина даних − 231 - 1 (2 147 483 647) символів. Якщо в кодової сторінці сервера використовуються двобайтові символи, об’єм займаного типом простору все одно не перевищує 2 147 483 647 байт. Він може бути менш 2 147 483 647 байт − залежно від рядка символів. image − цей тип являє двійкові дані змінної довжини, що включають від 0 до 231- 1 (2 147 483 647) байт. В таблиці 8 представлено функції та інструкції для роботи з даними ntext, text і image. Таблиця 8 Функції та інструкції для роботи із ntext, text і image Функції Інструкції  DATALENGTH READTEXT  PATINDEX SET TEXTSIZE  SUBSTRING UPDATETEXT  TEXTPTR WRITETEXT  TEXTVALID    money і smallmoney − типи даних, що представляють грошові (валютні) значення. Дані типи мають точність до однієї десятитисячної грошової одиниці, яку вони представляють. В таблиці 9 приведено характеристики цих типів даних. Таблиця 9 Характеристики money і smallmoney Тип даних Діапазон Зберігання  money Від -922 337 203 685 477,5808 до 922 337 203 685 477,5807 8 байт  smallmoney Від -214 748,3648 до 214 748,3647 4 байта   nchar і nvarchar − символьні типи даних, які мають постійну довжину, nchar або змінну довжину nvarchar, що містять дані в Юнікоді і використовують набір символів UCS-2. nchar [(n)] − символьні дані в Юнікоді довжиною в n символів. Аргумент n повинен мати значення від 1 до 4000. Розмір сховища вдвічі більше n байт. nvarchar [(n | max)] − символьні дані в Юнікоді змінної довжини. Аргумент n може приймати значення від 1 до 4 000. Аргумент max вказує, що максимальний розмір сховища дорівнює 231-1 байт. Розмір сховища в байтах вдвічі більше числа введених символів + 2 байти. Введені дані можуть мати довжину в 0 символів. Якщо аргумент n не вказаний у визначенні даних або в описі змінної, то за замовчуванням довжина дорівнює 1. Якщо аргумент n не вказаний у функції CAST, то за замовчуванням довжина дорівнює 30. Рекомендується використовувати nchar, якщо розміри елементів даних у стовпцях передбачаються подібні та nvarchar у протилежному випадку. Тип sysname − представлений системою визначений користувачем тип даних, який функціонально еквівалентний типу nvarchar(128), за винятком того, що не допускає значення NULL. Тип sysname використовується для посилань на імена об’єктів баз даних. Об’єктам, в яких використовуються типи даних nchar або nvarchar, за замовчуванням призначаються параметри сортування бази даних, якщо тільки інші параметри сортування не призначені з використанням пропозиції COLLATE. Для типів даних nchar і nvarchar параметр SET ANSI_PADDING завжди приймає значення ON. Параметр SET ANSI_PADDING OFF не застосовується до типів даних nchar і nvarchar. uniqueidentifier − 16-байтовий ідентифікатор GUID. Стовпець або локальну змінну типу uniqueidentifier можна ініціалізувати наступним чином: За допомогою функції NEWID. На основі рядкової константи, що має формат xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, де кожен x представляє шістнадцяткове число (0-9 або af). Прикладом коректного значення uniqueidentifier може служити значення 6F9619FF-8B86-D011-B42D-00C04FC964FF. Значення uniqueidentifier підтримують оператори порівняння, однак їх упорядкування реалізовано без використання порозрядного порівняння. Над значеннями uniqueidentifier можна виконувати тільки операції порівняння (=, <>, <,>, <=,> =) і перевірки на значення NULL (IS NULL і IS NOT NULL). Ніякі інші арифметичні оператори не підтримуються. До типу даних uniqueidentifier можна застосовувати всі обмеження і властивості стовпців за винятком IDENTITY. При реплікації злиттям та реплікації транзакцій з оновлюваними підписками стовпці uniqueidentifier використовуються для унікальної ідентифікації рядків у декількох копіях таблиці. xml − тип даних, в якому зберігаються XML-дані. Можна зберігати екземпляри xml в стовпці або в змінної типу xml. xml ([CONTENT | DOCUMENT] xml_schema_collection) Аргументи: CONTENT − екземпляр xml повинен бути коректним XML-фрагментом. XML-дані можуть містити кілька (0 або більше) елементів верхнього рівня. Текстові вузли дозволені на верхньому рівні. Ця поведінка встановлено за замовчуванням. DOCUMENT − екземпляр xml повинен бути коректним XML-документом. XML-дані повинні містити тільки один кореневий елемент. Текстові вузли на верхньому рівні заборонені. xml_schema_collection − назва колекції XML-схем. Щоб створити типізований стовпець або змінну xml, можна додатково вказати ім’я колекції XML-схем. Розмір збереженого подання екземплярів типу даних xml не може перевищувати 2 ГБ. Аспекти CONTENT і DOCUMENT застосовуються тільки до тіпізованним XML. Приклад використання даних типу xml. USE AdventureWorks; GO DECLARE @ y xml (Sales.IndividualSurveySchemaCollection) SET @ y = (SELECT TOP 1 Demographics FROM Sales.Individual); SELECT @ y; GO hierarchyid − є системним типом даних змінної довжини, який використовується для представлення положення в ієрархії. Стовбець типу hierarchyid не приймає деревоподібну структуру автоматично. Застосування має створити і призначити значення hierarchyid таким чином, щоб вони відображали необхідні зв’язки між рядками. Значення типу даних hierarchyid представляє позицію в деревоподібній ієрархії і володіє наступними властивостями: Виняткова компактність. Середнє число біт, необхідне для подання вузла в деревоподібній структурі з n вузлами, залежить від середньої кількості нащадків у вузла. Для невеликих рівнів розгалуження (0 − 7) цей розмір дорівнює 6∙logAn біт, де A − середній рівень розгалуження. Для подання вузла в ієрархії організації, що нараховує 100 000 осіб із середнім рівнем розгалуження 6, необхідно близько 38 біт. Ця величина округлюється до 40 біт (5 байт), які необхідні для зберігання. Порівняння проводиться в порядку пріоритету глибини. Якщо задані два значення hierarchyid a і b, a < b означає, що значення a з’являється раніше значення b, якщо проходити по дереву з пріоритетним напрямком в глибину. Індекси для типів даних hierarchyid розташовуються в порядку пріоритету глибини, і вузли, що зустрічаються поруч при проході по дереву з пріоритетним напрямком глибини, зберігаються поруч один з одним. Наприклад, нащадки деякого запису зберігаються поряд з цим записом. Підтримка довільних вставок і вилучень. За допомогою методу GetDescendant можна в будь-який момент створити однорівневий елемент, розташований праворуч від заданого вузла, ліворуч від заданого вузла або між будь-якими двома іншими однорівневими елементами. Властивість порівняння зберігається, якщо довільне число вузлів вставляється в ієрархію або видаляється з неї. Більшість операцій вставки і видалення зберігають властивість компактності. Однак операції вставки між двома вузлами призводять до створення значень hierarchyid, що володіють менш компактним поданням. Кодування в типі даних hierarchyid обмежена 892 байтами. Отже, вузли, що мають занадто багато рівнів, щоб вміститися в 892 байти, не можуть бути представлені типом hierarchyid. Тип даних hierarchyid доступний клієнтам середовища CLR у вигляді типу даних SqlHierarchyId. Тип даних hierarchyid логічно кодує відомості про один вузл в дереві ієрархії, кодуючи шлях від кореня дерева до цього вузла. Такий шлях логічно представлений у вигляді послідовності міток всіх відвіданих дочірніх вузлів, починаючи з кореня. Представлення починається косою рискою, а шлях до кореня представлений однією косою рискою. Для рівнів нижче кореня кожна мітка кодується у вигляді послідовності цілих чисел, розділених крапками. Порівняння дочірніх вузлів виконується шляхом порівняння цих цілочисельних послідовностей, розділених крапками, в лексикографічному порядку. Рівні розділяються косою рискою. Тобто коса риска відокремлює батьківський вузол від дочірнього. Наприклад, наступні шляхи з довжиною 1, 2, 2, 3 і 3 рівня відповідно дійсні для типу hierarchyid. / /1/ /0.3.-7/ /1/3/ /0.1/0.2/ Вузли можна вставляти в будь-яке місце. Вузли, вставлені після /1/2/, але перед /1/3/, можна представити як /1/2.5/. Вузли, вставлені після 0, логічно представлені у вигляді негативних чисел. Наприклад, вузол, розташований перед вузлом /1/1/, можна представити як /1/-1/. Вузли не повинні починатися з нулів. Наприклад, вузол /1/1.1/ є допустимим, а вузол /1/1.01/ − неприпустимий. Щоб уникнути помилок, вставляйте вузли за допомогою методу GetDescendant. Тип даних hierarchyid можна перетворити в інші типи наступним чином: Для перетворення значення типу даних hierarchyid в логічне подання типу даних nvarchar(4000) використовується метод ToString(). Для перетворення типу даних hierarchyid в тип varbinary використовуються методи Read() і Write(). Перетворення типу даних hierarchyid в XML не підтримується. table − особливий тип даних, який можна використовувати для зберігання результуючого набору з метою подальшої його обробки. Тип table застосовується, головним чином, для тимчасового зберігання набору рядків, що повертається функцією в якості результуючого набору. Для оголошення змінних типу table використовуйте інструкцію DECLARE @ local_variable. Функції та змінні можуть бути оголошені як змінні типу table. Змінні table можуть використовуватися у функціях, збережених процедурах і в пакетах. Запити, що змінюють змінні table, не створюють паралельних планів виконання запиту. При зміні дуже великих змінних table або змінних table в складних запитах, може знизитися продуктивність. У подібних випадках доцільно розглянути можливість використання тимчасових таблиць. Запити, які зчитують змінні table, не змінюючи їх, можуть виконуватися паралельно. Використання змінних table дає такі переваги: Змінна table веде себе як локальна змінна. Вона має точно визначену область застосування. Це функція, збережена процедура або пакет, в якому вона оголошена. Усередині цієї області змінна table може використовуватися як звичайна таблиця. Вона може бути застосована в будь-якому місці, де використовується таблиця або табличне вираження в інструкціях SELECT, INSERT, UPDATE і DELETE. Однак змінна table не може бути використана в наступній інструкції: SELECT select_list INTO table_variable Змінні table автоматично очищаються в кінці функції, збереженої процедури або пакета, де вони були визначені. Обмеження CHECK, значення DEFAULT і обчислювані стовпці в декларації типу table не можуть викликати користувацькі функції. При використанні у збережених процедурах змінних table доводиться вдаватися до повторних компіляцій рідше, ніж при використанні тимчасових таблиць. Транзакції з використанням змінних table продовжуються тільки під час процесу оновлення відповідної змінної table. Тому змінні table рідше піддаються заблокуванню, і вимагають менших ресурсів для ведення журналів реєстрації. На змінні table не можна створювати індекси та статистику. У деяких випадках можна домогтися підвищення продуктивності за рахунок використання замість табличних змінних тимчасових таблиць, які дозволяють створювати індекси і вести статистичний облік. На змінні table можна посилатися за ім’ям в пакетному виразі FROM, як показано в наступному прикладі: SELECT Students_ID, Department_ID FROM @ MyTableVar За межами інструкції FROM на змінні table потрібно посилатися за псевдонімом, як показано в наступному прикладі: SELECT StudentID, DepartmentID FROM @ MyTableVar m JOIN Students on (m.StudetnsID = Students.StudentsID AND     m.DepartmentID = Students.DepartmentID) Виконання операцій призначення між змінними table не допускається. Крім того, оскільки змінні table мають обмежену область застосування і не є частиною постійних баз даних, вони не змінюються в разі відкатів транзакцій. rowversion − тип даних, який представляє собою автоматично сформовані унікальні двійкові числа в базі даних. Тип даних rowversion використовується в основному в якості механізму для позначки версій рядків таблиці. Розмір при зберіганні складає 8 байт. Тип даних rowversion являє собою збільшуване значення, яке не зберігає дату або час. Тип даних datetime2 використовується для запису дати або часу. Кожна база даних має лічильник, який збільшується при кожній операції вставки або оновлення в таблиці, що містить стовпець типу rowversion в базі даних. Цей лічильник типу rowversion використовується для роботи з базами даних. Відбувається відстеження відносного часу бази даних, а не дійсного часу, який може бути пов’язаний з годинником. У таблиці може бути тільки один стовпець типу rowversion. Кожного разу при зміні або вставці рядка, що містить стовпець типу rowversion, значення збільшеного rowversion вставляється в стовпець типу rowversion. Через ці властивості стовпець типу rowversion небажано використовувати в ключі, особливо в первинному ключі. Будь-яке оновлення, зроблене в рядку, змінює значення rowversion і значення ключа. Якщо стовпець є первинним ключем, старе значення ключа більше недійсне і зовнішні ключі, що мають посилання на старе значення, стають недійсними. Якщо на таблицю посилається динамічний курсор, всі оновлення змінюють положення рядків у курсорі. Якщо стовпець є ключем індексу, всі оновлення в рядках даних також призводять до оновлення індексу. Тип даних timestamp є синонімом типу даних rowversion і підпорядковується правилам поведінки синонімів типу даних. В інструкціях мови DDL використовуйте по можливості тип даних rowversion замість timestamp. Тип даних Transact-SQL timestamp відрізняється від типу даних timestamp, визначеного в стандарті ISO. Синтаксис timestamp застарів. В майбутньої версії Microsoft SQL Server ця інструкція буде відсутня. В інструкціях CREATE TABLE або ALTER TABLE не обов’язково вказувати ім’я стовпця із типом даних timestamp. Розглянемо приклад. CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp); Якщо ім’я стовпця не вказати, компонент SQL Server Database Engine формує ім’я стовпця типу timestamp. Синонім rowversion не підкоряється цьому правилу. При використанні типу даних rowversion зазначення імені стовпця обов’язкове. CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion); За допомогою інструкції SELECT INTO, в якій стовпець типу rowversion знаходиться в списку SELECT, можуть бути сформовані повторювані значення rowversion. Використовувати тип даних rowversion таким чином не рекомендується. Стовбець rowversion, який не може приймати значення NULL, семантично еквівалентний стовпцю із типом binary(8). Стовбець rowversion, що допускає значення NULL, семантично еквівалентний стовпцю із типом varbinary (8). Стовбець rowversion можна використовувати, щоб визначити, чи було проведено зміну якого-небудь значення в рядку з моменту її останнього зчитування. При виконанні будь-яких змін у рядку значення rowversion буде оновлено. Якщо в рядку не було ніяких змін, значення rowversion буде таким же, як і при попередньому зчитуванні. Для отримання поточного значення rowversion використовуйте функцію @@DBTS: USE AdventureWorks; GO SELECT @@DBTS Можна додати стовпець rowversion до таблиці, щоб забезпечити цілісність бази даних у випадках одночасного оновлення рядків декількома користувачами. Також може виникнути необхідність у даних про кількість рядків і вказівці оновлених рядків без відправки повто...
Антиботан аватар за замовчуванням

21.01.2012 16:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!