Отправляет email-рассылки с помощью сервиса Sendsay

Вопросы и ответы по MS SQL Server

  Все выпуски  

Вопросы и ответы по MS SQL Server


Информационный Канал Subscribe.Ru


Вопросы и ответы по MS SQL Server

Выпуск No. 12 от 2003-05-09

Вопрос : Для чего нужен тип переменной table?

Ответ:
В версии MS SQL Server 2000 появился новый тип переменной table. Когда в первый раз слышишь об этом типе, то сразу начинаешь мечтать о возможности обмена информацией в табличном виде между процедурами, о передаче таблицы в процедуру и т.п. Реальность оказывается прозаичнее.
Тип table похож на временные таблицы, но область видимости у этого типа такая же, как и у всех локальных переменных.
И для чего же он тогда нужен, если есть временные таблицы? И чем он лучше и чем хуже временных таблиц?

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

Работа с переменной table производится также как и с временной таблицей с помощью операторов SELECT, INSERT, UPDATE и DELETE. Операция присвоения между переменными table не допускается.
В отличие от временных таблиц на этот тип наложен ряд ограничений:
1. Запрещено использование операторов следующего вида:
INSERT INTO переменная_table EXEC хранимая_процедура

SELECT список_колонок INTO переменная_table

2. Ограничения CHECK, DEFAULT значения и вычисляемые колонки табличных переменных не могут использовать пользовательские функции.
3. Запрещено создание индексов, за исключением индекса PRIMARY KEY и ограничения UNIQUE, которые создаются при объявлении переменной.

Тем не менее, у этого типа есть преимущества перед временными таблицами:
1. Использование переменной table вместо временной таблицы уменьшает время перекомпиляции хранимой процедуры.
2. При использовании переменной table расходуется меньше ресурсов на блокировку и ведение журнала транзакций. Но при этом переменные не попадают под действие команды ROLLBACK TRANSACTION.
DECLARE @MyTable TABLE (ID int IDENTITY PRIMARY KEY, Name varchar (50))


INSERT INTO @Mytable
SELECT 'String 1'
UNION ALL
SELECT 'String 2'
UNION ALL
SELECT 'String 3'

BEGIN TRAN
UPDATE @MyTable SET Name='New String' WHERE ID=2
ROLLBACK TRAN

SELECT * FROM @MyTable
GO

Результат работы скрипта:
(3 row(s) affected)



(1 row(s) affected)

ID Name
----------- --------------------------------------------------
1 String 1
2 New String
3 String 3

(3 row(s) affected)

Но при проведении практических экспериментов перечисленные преимущества не всегда бывают очевидны.

На этом закончим.
АНОНС РАССЫЛОК:
Рассылки сайта progs.biz через Subscribe.Ru
Уроки по SQL Server
Уроки по C++ Builder
Уроки по ассемблеру
Уроки для начинающих по SQL Server. Создание баз данных, администрирование, программирование, использование языка T-SQL, написание клиентских приложений.
Уроки по программированию на C++ Builder. Библиотека VCL, создание собственных компонентов, работа с базами данных, примеры, FAQ. Уроки разбиты на серии. Каждая серия независима от других.
Уроки по ассемблеру. Использование MASM, примеры, FAQ.

Надеюсь, Вы нашли эту информацию полезной. Вопросы, предложения и пожелания шлите на адрес sql@likor.ru
С уважением, Сергей Кошкин.
Архив рассылки смотрите на сайте Рассылки http://sql.softmatics.ru/
Рейтинг@Mail.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное