Глобальные временные таблицы
Если создается глобальная временная таблица, она видна во всех других сеансах. Такие таблицы 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).
Читайте также: FROM dbo.Table2 -- выборка d2 из таблицы Table2 Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|