Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Артемов Д.В. -> "Microsoft SQL Server 2000" -> 58

Microsoft SQL Server 2000 - Артемов Д.В.

Артемов Д.В. Microsoft SQL Server 2000 — М.: Издательско-торговый дом «Русская Редакция», 2001. — 576 c.
ISBN 5-7502-0154-6
Скачать (прямая ссылка): artemov.pdf
Предыдущая << 1 .. 52 53 54 55 56 57 < 58 > 59 60 61 62 63 64 .. 187 >> Следующая


Bigint

Несколько лет назад, когда инфляция у нас была не хуже, чем в Германии в 30-е годы, нам высказали претензии: мол, SQL Server (тогда это была версия 4.2) не хранит достаточно большие числа, и поэтому заказчик выбирает Oracle. Позднее появилась поддерживающая до 38 разрядов, а теперь и SQL Server 2000 с типом Bigint, способным хранить числа в диапазоне от -2л63-1 (9223372036854775808) до 2"63-1 (9223372036854775807), под каждое число отводится 8 байт хранения.

Table

Тип данных Table представляет собой таблицу. Если угодно, можно назвать этот тип данных массивом, но это будет не совсем верно, так как, подобно любой таблице, переменная Table поддерживает команды SELRECT, INSERT, UPDATE, DELETE. Вот как объявляется такая переменная, и что можно с ней делать:

DECLARE @TablevarTable(Fld1 char(15), Fld2 Char(l5))

INSERT @TaoleVa г Values (Table field', 'Table fieldT)

SELECT * FROM ©TableVar

UPDATE ©TableVar SET Fld1 = 'Changed'

DELETE FROM @TableVar

В любом месте, где можно использовать таблицу, можно вызвать и переменную Table. Если честно, то сервер и воспринимает ее как таблицу. А как иначе, ведь это таблица и есть! Посмотрим, что дает нам SQL Server Profiler:

www.books-shop.com

Microsoft SQL Server 2000. Новейшие технологии

SQL-.BatchStarting declare ©TableVar Table(Fldl char(l5), Fld2

Char(15))

Событие ID объекта #БД Имя объекта

Object:Created 1742629251 2 @TableVar

Вставив в тот же пакет команд SELECT * FROM tempdb..sysobjects ORDER BY id, Вы увидите в результатах выборки строку:

name id Xtype

#67DE6983 1742629251 U

Вот она, наша переменная, — таблица. Что это значит? Во-первых, при значительных объемах информации, помещенных в переменную, скорость работы с ней не будет быстрее чем с временной таблицей. Во-вторых, в нее можно положить сколько угодно информации, не боясь переполнить память: ничего особенного сервер скорее всего не делает — обычная таблица, имя которой создается программно и которая живет в пределах своей области видимости. Что использовать: переменные Table или временные таблицы? Документация рекомендует первые, утверждая, что процедуры будут перекомпилироваться, как это имеет место при использовании вторых. Проверка средствами Profiler показала, что создание временной таблицы ведет к перекомпиляции процедуры, а переменной типа Table

— нет. Что значит «реже», я не знаю, оставляю тщательное тестирование Вам, пытливый читатель. Еще одно преимущество переменной

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

Модификация структуры таблицы

Допустим, Вы не продумали схему БД, и через месяц выяснилось, что таблице А не нужны некоторые поля, а у таблицы В некоторые поля определены неправильно. Версия 8.0 позволяет изменить существующие таблицы. Вы можете все, ну, почти все — не только добавлять новые поля.

Вот некоторые аргументы команды ALTER TABLE.

• TABLE Имя модифицируемой таблицы.

• WITH CHECK|WITH NOCHECK При добавлении новых ограничений FOREIGN KEY или CHECK или активизации ранее отключенных ограничений данные в таблице могут не проверяться на соответствие этим ограничениям. Если этот аргумент не ука-

www.books-shop.com

ГЛАВА 3: Управление базами

данньх

155

Данная версия книги выпущена электронным издательством "Books-shop". Распространение, продажа, перезапись данной книги или ее частей ЗАПРЕЩЕНЫ. О всех нарушениях просьба сообщать по адресу piracy@books-shop.com

зан, для новых ограничений подразумевается выполнение проверки (WITH CHECK), для активизированных ограничений — отсутствие проверки (WITH NOCHECK).

• ALT ER COLUMN Указывает, что данное поле будет модифицировано (аргумент неприменим, если уровень совместимости задан меньше 7.0). Модификации не поддаются поля типа text, image, ntext или timestamp, а также типа ROWGUIDCOL. Модифицируемое поле не должно быть вычисляемым или входить в состав вычисляемого поля. Не поддается модификации поле из статьи репликации. Поле, используемое для организации индексного ключа, можно модифицировать, только если оно имеет тип varchar, nvarchar или varbinary, причем Вы не меняете тип данных, а новая длина не больше существующей. Поле, использованное для организации статистики командой CREATE STATISTICS, также не-модифицируемо. Сначала надо удалить статистику. Создаваемая автоматически статистика автоматически же удаляется параметром ALTER COLUMN. Нельзя модифицировать поля из состава первичного или вторичного ключей, ограничений CHECK или UNIQUE. Для последних исключением является случай, когда Вы только меняете длину поля с типом данных переменной длины. Поле, связанное со значением умолчания, можно модифицировать только с точки зрения длины, точности или числа хранимых десятичных знаков, тип данных менять непозволительно.

• CHECK|NOCHECK Позволяет активизировать или отключить ограничения. При отключенном ограничении последующие добавления или модификации данных таблицы не проверяются на соответствие отключенному правилу. Этот аргумент используется только с ограничениями FOREIGN KEY и CHECK. Для отключения/активизации всех ограничений служит аргумент ALL. Кстати, проверка не отключается, когда таблица модифицируется добавлением ограничений PRIMARY KEY или UNIQUE.
Предыдущая << 1 .. 52 53 54 55 56 57 < 58 > 59 60 61 62 63 64 .. 187 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100