Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Топовые новости
Новое

Инструкция ALTER TABLE в SQL Server (продолжение)


CHECK

Производится проверка того, что значение, вставляемое в указанный столбец таблицы, является допустимым с точки зрения проверочного выражения. Например, ниже приведен пример таблицы с двумя ограничениями CHECK уровня столбца.

CREATE TABLE people
(people_id CHAR(4) CONSTRAINT Pk_dist_id PRIMARY KEY CLUSTERED
CONSTRAINT ck_dist_id CHECK (dist_id LIKE ‘ [A-Z] [A-Z] [A-Z] [A-Z]’),
people_name VARCHAR(40) NULL,
people_addr1 VARCHAR(40) NULL,
people_addr2 VARCHAR(40) NULL,
city VARCHAR(20) NULL,
state CHAR(2) NULL CONSTRAINT def_st DEFAULT (‘CA’) CONSTRAINT ck_st REFERENCES states(state_ID),
zip CHAR(5) NULL CONSTRAINT ck_dist_zip CHECK(zip LIKE ‘[0-9] [0-9] [0-9] [0-9] [0-9]’),
phone CHAR(12) NULL,
sales_rep empid NOT NULL DEFAULT USER)
GO

Проверочное ограничение на значение people_id проверяет то, что идентификатор содержит только буквы, а ограничение на значение zip удостоверяется в том, что значение содержит только цифры. Ограничение REFERENCE на значение state производит поиск в таблице states. Ограничение REFERENCE по сути аналогично ограничению CHECK, за исключением того, что оно генерирует список допустимых значений по значениям в другом столбце. Этот пример также иллюстрирует, каким образом ограничениям присваиваются имена с помощью синтаксиса CONSTRAINT имя_ограничения.

COLLATE

Позволяет программистам изменять используемый порядок сортировки и набор символов в отдельных столбцах.

TEXTIMAGEJDN {файловая группа DEFAULT)

Управляет размещением столбцов text, ntext и image, позволяя помещать данные LOB в выбранную файловую группу. Если предложение опущено, эти столбцы сохраняются в файловой группе по умолчанию, там же, где все прочие таблицы и объекты базы данных.


WITH [NO]CHECK

Определяет, будут ли данные в таблице проверяться с использованием добавляемых позже ключей и ограничений. Если ограничения добавляются с опцией WITH NOCHECK, то оптимизатор запросов игнорирует их до тех пор, пока они не будут включены с помощью команды ALTER TABLE имя_таблицы CHECK CONSTRAINT ALL. Если ограничения добавляются с опцией WITH CHECK, то проверка всех данных, уже имеющихся в таблице, производится немедленно.

[NOJCHECK CONSTRAINT

Существующее ограничение включается (CHECK CONSTRAINT) или выключается (NO CHECK CONSTRAINT).

{ENABLE] DISABLE) TRIGGER {ALL имя_триггера [, …]}

Предложение включает или соответственно отключает указанный триггер или триггеры. Все триггеры в таблице можно включить или выключить, заменив ключевое слово ALL на имя таблицы: ALTER TABLE employee DISABLE TRIGGER ALL. Вы также можете включить или отключить один триггер с именем имя_триггера или несколько триггеров, перечислив их имена через запятую.

SQL Server позволяет присвоить имя любому ограничению уровня столбца при помощи конструкции CONSTRAINT имя ограничения… (далее идет текст ограничения). В одном столбце можно использовать несколько ограничений, если только они не являются взаимоисключающими (например, PRIMARY KEY vl NULL).

SQL Server также позволяет создавать локальные временные таблицы, но при этом не используется синтаксис ANSI. Для локальной временной таблицы, которая сохраняется в базе данных tempdb, требуется префикс в виде одного знака диеза (#) перед именем таблицы. Локальную временную таблицу может использовать пользователь или процесс, создавший ее, и она удаляется, когда пользователь завершает соединение или когда процесс завершает работу. Глобальная временная таблица, которую могут использовать все пользователи и процессы, подключенные к базе данных, можно создать, используя в качестве префикса перед именем таблицы двойной знак диеза (##). Глобальная таблица удаляется, когда завершается работа создавшего его процесса или разрывается соединение с создавшим ее пользователем.

Система SQL Server также позволяет создавать таблицы со столбцами, которые содержат вычисляемое значение. Такой столбец не содержит реальных данных. Это виртуальный столбец, содержащий выражение, использующее другие столбцы, входящие в таблицу. Например, вычисляемый столбец может содержать такое выражение, как стоимость_заказа AS (цена * количество). Вычисляемые столбцы также могут содержать константы, функции, переменные, невычисляемые столбцы, которые связаны друг с другом при помощи операторов.

Любые ограничения уровня столбца, которые приведены выше, могут также быть объявлены на уровне таблицы. Иными словами, ограничения PRIMARY KEY, CHECK и прочие можно объявлять после объявления всех столбцов в инструкции CREATE TABLE. Это очень полезная возможность для тех ограничений, которые касаются нескольких столбцов. Например, ограничение UNIQUE уровня столбца может применяться только к этому столбцу. Однако, если ограничение объявлено на уровне таблицы, это позволяет распространять его действие на несколько столбцов. Ниже приводится пример ограничений уровня столбца и уровня таблицы.

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

В следующем примере к таблице добавляется новое ограничение CHECK, но не производится проверка того, что существующие в таблице значения удовлетворяют этому ограничению.

ALTER TABLE favorite_book WITH NOCHECK ADD CONSTRAINT extra_check CHECK (ISBN > 1) GO

В следующем примере мы добавляем столбец с присвоенным значением по умолчанию (DEFAULT), который добавляется в каждую существующую в таблице строку.

ALTER TABLE favorite_book
ADD reprint_nbr INT NULL CONSTRAINT add_reprint_nbr
DEFAULT 1 WITH VALUES GO

Теперь отключаем ограничение.

ALTER TABLE favorite_book NOCHECK CONSTRAINT add_reprint_nbr GO


CREATE SCHEMA DROP

Триггер — это особый тип записанной процедуры, которая автоматически срабатывает (отсюда и термин «триггер»), когда в таблице выполняется конкретная инструкция, связанная с модификацией данных. Триггер прямо связан с таблицей и считается зависимым объектом. Например, вам может понадобиться, чтобы все значения part_numbers в таблице sales обновлялись при изменении значения part_number в таблице products, обеспечивая таким образом синхронизацию.

Источник