Тимчасові таблиці і табличні змінні

Тимчасові таблиці і табличні перемененние грають роль, яка докорінно відрізняється від стандартних таблиць Завдяки своєї тимчасової природі ці обєкти корисні як засоби переміщення даних між іншими обєктами або як рятувальний круг, призначений для виконання виключно термінової роботи

Локальні тимчасові таблиці

Локальні таблиці створюються точно так само, як і звичайні, за винятком того, що їх імя має починатися з символу решітки (#) Тимчасові таблиці фактично створюються на диску в базі даних tempdb:

CREATE TABLE #ProductTemp (

ProductID INT PRIMARY KEY )

Термін життя тимчасових таблиць невеликий Коли завершуються створили їх пакет або збережена процедура, тимчасові таблиці видаляються Якщо тимчасова таблиця створюється в ході інтерактивної сесії (наприклад, у вікні Query Analyzer), то вона виживає тільки до кінця поточної сесії Природно, в пакеті ці таблиці можна видалити і звичайним чином

Область визначення тимчасової таблиці також обмежена-її може побачити тільки створило її підключення Навіть якщо тисячі користувачів створить тимчасові таблиці з одним і тим же імям, кожен з них буде бачити тільки свою Причина цього полягає в тому, що фізично тимчасові таблиці створюються в базі даних tempdb з імям, що складається з вказаного користувачем, та ідентифікатора підключення Імена більшості обєктів можуть мати до 128 символів, але тимчасові таблиці обмежені тільки сто шістнадцятьма, оскільки останні 12 символів використовуються для ідентифікації підключення Продемонструємо це на прикладі У пропонованому сценарії створюється тимчасова таблиця, а потім її імя витягується з таблиці sysObj ects:

SELECT Name

FROM TempDBdboSysObjects WHERE Name Like #Pro%1

Результат показаний в скороченому вигляді, так як насправді реальне значення має довжину в 128 символів:

Name

#ProductTemp______________________________________ 0 000000000 2D

Незважаючи на присваиваемое сервером довге імя, в запитах використовується тільки його частину, задана користувачем

Глобальні тимчасові таблиці

Глобальні тимчасові таблиці аналогічні локальним, але мають більш широку область визначення До глобальних тимчасовим таблицям можуть звертатися всі користувачі, а термін їх життя продовжується до закінчення сесії роботи останнього користувача, що звертається до них

Глобальні тимчасові таблиці мають імя, що починається з двох символів решітки (# #) У наступному прикладі перевіряється наявність глобальних тимчасових таблиць, і при отриманні негативного результату така створюється:

IF NOT EXISTS(

SELECT * FROM TempdbdboSysobjects WHERE Name = ##TempWork1)

CREATE TABLE ##TempWork(

PK INT,

Coll INT

)

Тимчасові таблиці найчастіше використовуються для поточної роботи Як альтернативу можна створити звичайну власну таблицю в базі даних tempdb SQL Server очищає і перебудовує цю базу даних при кожному запуску, видаляючи і альтернативні таблиці

Табличні змінні

Табличні змінні аналогічні тимчасовим таблицям – насправді і ті й інші знаходяться в базі даних tempdb Головна відмінність, крім синтаксису, полягає в тому, що табличні змінні мають ту ж область визначення, що і локальні Вони видимі тільки в пакеті або збереженої процедурою, в яких створені Табличні змінні мають і ряд додаткових обмежень

■ Вони не можуть бути створені з використанням синтаксису SELECT * INTO або INSERT INTO

■ Табличні змінні не можуть бути створені всередині функцій

■ У табличних змінних неприпустимі обмеження перевірки та зовнішні ключі У той же час в них дозволені первинні ключі, значення за замовчуванням, порожні значення і обмеження на унікальність

■ Таблічниепеременние не можуть мати залежних обєктів, таких як тригери і зовнішні ключі

Табличні змінні оголошуються як звичайні, а не створюються за допомогою інструкцій SQL DDL Коли на табличну змінну посилається запит, звернення до неї відбувається як до таблиці, проте іменується вона як змінна Наступний сценарій повинен бути виконаний як єдиний пакет або завершитися помилкою:

DECLARE @WorkTable TABLE (

РК INT PRIMARY KEY,

Coll INT NOT NULL)

INSERT INTO ©WorkTable (PK, Coll)

VALUES ( 1, 101)

SELECT PK, Coll

FROM @WorkTable

Буде отримано наступний результат:

РК Coll

1 101

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*