Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Глобальные временные таблицы




Если создается глобальная временная таблица, она видна во всех других сеансах. Такие таблицы SQL Server уничтожает автоматически, когда отключается сеанс, создавший табли­цу, и на нее нет активных ссылок. Глобальная временная таблица создается добавлением к ее имени двух знаков решетки в качестве префикса, например ##Т1.

Глобальные временные таблицы полезны, если нужно обеспечить совместный доступ всех пользователей к временным данным. Никаких специальных прав доступа не требуется, и у всех есть полный доступ на языках DDL и DML.

 

Табличные переменные

Табличные переменные похожи на локальные временные таблицы, но объявляются табличные переменные так же, как другие переменные с помощь инструкции DECLARE.

Табличные переменные физически присутствуют в виде таблиц в базе данных tempdb.

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

При откате явно заданной транзакции изменения, внесенные во время этой транзакции в иные таблицы, отменяются, а для изменений, внесенных в табличные переменные инструкциями, завершившимися в транзакции, откат не выполняется. Отменяются только изменения, выполненные активной инструкцией, которая завершилась аварийно или была преждевременно завершена.

С точки зрения производительности, как правило, имеет смысл применять табличные переменные с очень малыми объемами данных и использовать временные таблицы в противном случае.

Рассмотренный выше пример с использованием табличной переменной:

DECLARE @MyOrderTotalsByYear As TABLE

(

orderyear INT NOT NULL PRIMARY KEY,

qty INT NOT NULL

);

 

INSERT INTO @MyOrderTotalsByYear(orderyear, qty)

SELECT

YEAR(O.orderdate) AS orderyear,

SUM(OD.qty) AS qty

FROM Sales.Orders AS O

JOIN Sales.OrderDetails AS OD

ON OD.orderid = O.orderid

GROUP BY YEAR(orderdate);

 

SELECT Cur.orderyear, Cur.qty AS curyearqty, Prv.qty AS prvyearqty

FROM @MyOrderTotalsByYear AS Cur

LEFT OUTER JOIN @MyOrderTotalsByYear AS Prv

ON Cur.orderyear = Prv.orderyear + 1;

GO

Результат:

 

В SQL Server 2008 добавлены табличные типы данных (TABLE).

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...