Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БазыДанных(заочка) / Базы данных (учебное пособие).doc
Скачиваний:
194
Добавлен:
17.04.2015
Размер:
1.61 Mб
Скачать

3.4.5. Изменение данных

Для изменения данных можно использовать различные методы, включая удаление и повторную вставку строк. Чаще всего изменение данных производится с помо­щью команды UPDATE, позволяющей выполнять как простое обновление данных в столбце, так и сложные операции модификации данных во множестве строк таб­лицы. Если алгоритм изменения данных достаточно сложен, то чтобы избавить пользователей от необходимости написания сложных запросов, можно создать хранимую процедуру, которая и будет изменять данные в таблице. Хранимые процедуры также могут быть использованы в тех случаях, когда пользователям нельзя предоставлять прямой доступ к таблицам. Чтобы выполнить модифика­цию данных, пользователю нужно будет вызвать соответствующую процедуру, которая и выполнит изменения. Аналогичным образом можно поступить и для реализации вставки, удаления и выборки данных.

Итак, изменение данных выполняется с помощью команды UPDATE. Рассмотрим синтаксис этой команды:

UPDATE

{table_name WITH ( <table_hint_limited>)

| view_name

| rowset_function_limited}

SET

{column_name = (expression | DEFAULT | NULL )

| @variable = expression

| @variable = column = expression }

{ [ FROM (<table_source>)]

[ WHERE <search__condition>]}

[ WHERE CURRENT OF

{( [ GLOBAL ] cursor_narne ) | cursor_variable_name]}

[OPTION ( <query_hint>)]

Рассмотрим подробно назначение каждого из аргументов.

- tab1e_name. Имя таблицы, в которой необходимо произвести изменение дан­ных.

- [WITH ( <table_hint_limited> [.. .n])]. С помощью этого параметра можно уп­равлять режимом блокирования данных в таблице на время выполнения ко­манды UPDATE.

- view_name. Имя представления, данные в котором необходимо модифициро­вать.

- rowset_function_limited. Этот параметр подразумевает использование функции для работы с наборами строк — OPENQUERY или OPENROWSET, которая определяет набор изменяемых данных. Указанные функции позволяют реализовать воз­можности технологии OLE DB и работать с данными, расположенными не на сервере Microsoft SQL Server.

- SET. С ключевого слова SET начинается блок, в котором определяется спи­сок изменяемых столбцов или переменных. Команда UPDATE позволяет изме­нять не только столбцы таблицы, но и значения переменных. В одной команде допускается изменение и столбцов и переменных. За один вызов UPDATE можно изменить данные в нескольких столбцах множества строк од­ной таблицы.

- column_name = {expression | DEFAULT | NULL}. Для каждого изменяемого столбца нужно определить значение, которое он примет после выполнения измене­ния. С помощью ключевого слова DEFAULT можно присвоить столбцу значе­ние, определенное для него по умолчанию. Можно также установить для столб­ца значение NULL. Если необходимо установить определенное значение, следует указать константу, переменную или выражение.

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

@variable = column = expression. Эта конструкция позволяет сочетать использование переменных и имен столбцов.

FROM {<table_source>}. Если при изменении данных в таблице необходимоучесть состояние данных в других таблицах (представлениях), то эти источникиданных необходимо указать в разделе From.

WHERE <search_condition> Назначение раздела Where, используемого в запросе Update, полностью соответствует назначению, которое раздел имеет в запросе Select.

WHERE CURRENT OF. Использование этой конструкции заставляет сервер выполнять обновление данных в строке, являющейся текущей в указанном курсоре.

Курсор – механизм обмена данными между сервером и клиентом. Он позволяет клиентским приложениям работать не с полным наботом данных, а лишь с одной конкретной строкой.

([GLOBAL] cursor_name | cursor_variable_name). Эта конструкция используется совместно с предыдущим параметром и определяет имя курсора. Ключевое слово Global говорит серверу о том, что курсор глобальный.

OPTION (<query_hint> […n]). Ключевое слово Option определяет набор хинтов, управляющих блокировкой курсора на время выполнения запроса.

Хинты – это специальные ключевые слова, распознаваемые оптимизатором запроса.