Операториспользуется для обновления схемы существующей таблицы.
ALTER TABLE имя таблицы
ADD | DROP имя_столбца тип_данных [NULL | NOT 1>NULL] [CONSTRAINTS] , ADD I DROP имя_столбца тип_данных [NULL|NOT 4>NULL] [CONSTRAINTS] ,
Операторобновляет одну или несколько строк таблицы.
UPDATE имя_таблицы SET имя_столбца = значение, [WHERE ...];
UPDATE ( column )
Аргументы
column
Это имя столбца для проверки на действие INSERT или UPDATE. Так как имя столбца указано в предложении триггера ON, не ставьте имя таблицы перед именем столбца. Столбец может содержать любой тип данных, поддерживаемый SQL Server 2005. Однако вычисляемые столбцы не могут использоваться в данном контексте.
Типы возвращаемых данных
Boolean
Замечания
Функция UPDATE() возвращает TRUE независимо от того, была ли попытка применить операторы INSERT или UPDATE удачной.
Чтобы проверить действие операторов INSERT или UPDATE для нескольких столбцов, укажите отдельно предложение UPDATE(column), следующее за первым предложением. Несколько столбцов также могут быть проверены на действие INSERT или UPDATE при помощи COLUMNS_UPDATED. В результате возвращается битовый шаблон, который указывает на то, какие столбцы были вставлены или обновлены.
IF UPDATE возвращает значение TRUE по действиям оператора INSERT, так как столбцы содержат либо явные вставленные значения, либо неявные вставленные значения (NULL).
UPDATE(column) может применяться в любой части тела триггера Transact-SQL.
Примеры
Следующий пример создает триггер, который выдает сообщение клиенту при попытке обновить столбец StateProvinceID или PostalCode в таблице Address.
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.objects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER Person.reminder;
GO
CREATE TRIGGER reminder
ON Person.Address
AFTER UPDATE
AS
IF ( UPDATE (StateProvinceID) OR UPDATE (PostalCode) )
Задает временный именованный результирующий набор, также называемый обобщенным табличным выражением, который определяется в области действия инструкции DELETE. Результирующий набор получается из инструкции SELECT.
Обобщенные табличные выражения также можно использовать в инструкциях SELECT, INSERT, UPDATE и CREATE VIEW..
TOP (expression) [ PERCENT ]
Задает число или процент случайных строк для удаления. Выражение expression может быть либо числом, либо процентом строк. Строки, на которые ссылается выражение TOP, используемое с инструкциями INSERT, UPDATE и DELETE, не упорядочиваются.
Разделение круглыми скобками выражения expression в выражении TOP требуется в инструкциях INSERT, UPDATE и DELETE.
FROM
Необязательное ключевое слово, которое можно использовать между ключевым словом DELETE и целевым аргументом table_or_view_name или rowset_function_limited.
server_name
Имя сервера (с использованием имени связанного сервера или функции OPENDATASOUTCE в качестве имени сервера), на котором расположена таблица или представление. Если аргумент server_name указывается, аргументы database_name и schema_name обязательны.
database_name
Имя базы данных.
schema_name
Имя схемы, которой принадлежит таблица или представление.
table
Имя таблицы, из которой удаляются строки.
Переменную table в пределах ее области действия также можно использовать в качестве источника таблицы в инструкции DELETE.
WITH ( <table_hint_limited> [... n] )
Задает одну или несколько табличных подсказок, разрешенных для целевой таблицы. Ключевое слово WITH и круглые скобки обязательны. Использование ключевых слов NOLOCK и READUNCOMMITTED запрещено..
view_name
Имя представления, из которого удаляются строки.
Представление, на которое ссылается аргумент view_name , должно быть обновляемым и ссылаться ровно на одну базовую таблицу в предложении FROM данного представления..
rowset_function_limited
Функция OPENQUERY или OPENROWSET в зависимости от возможностей поставщика.
table_valued_function
Может быть возвращающей табличное значение функцией.
<OUTPUT_Clause>
Возвращает удаленные строки или выражения, основанные на них, как часть операции DELETE. Предложение OUTPUT не поддерживается ни в каких инструкциях DML, направленных на представления и удаленные таблицы..
FROM <table_source>
Задает дополнительное предложение FROM. Это расширение языка Transact-SQL для инструкции DELETE позволяет задавать данные из <table_source> и удалять соответствующие строки из таблицы в первом предложении FROM.
Это расширение, в котором задается соединение, может быть использовано вместо вложенного запроса в предложении WHERE для указания удаляемых строк.
WHERE
Указывает условия, используемые для ограничения числа удаляемых строк. Если предложение WHERE не указывается, инструкция DELETE удаляет все строки из таблицы.
Предусмотрено два вида операций удаления в соответствии с тем, что указывается в предложении WHERE.
· Операции удаления с поиском указывают условие поиска для уточнения строк, которые будут удалены. Например, WHERE column_name = value.
· Операции удаления по позиции используют предложение CURRENT OF для указания курсора. Удаление осуществляется в текущей позиции курсора. Эта операция может быть более точной, чем инструкция DELETE по найденному, которая использует предложение WHERE search_condition для указания удаляемых строк. Инструкция DELETE по найденному удаляет несколько строк, если условие поиска не определяет уникально одну строку.
<search_condition>
Указывает ограничивающие условия для удаляемых строк. Количество предикатов, которое может содержать условие поиска, не ограничено.
CURRENT OF
Указывает выполнение инструкции DELETE в текущей позиции указанного курсора.
GLOBAL
Указывает, что аргумент cursor_name ссылается на глобальный курсор.
cursor_name
Имя открытого курсора, из которого производится выборка. Если существует как глобальный, так и локальный курсор с именем cursor_name, то, когда указывается GLOBAL, этот аргумент указывает на глобальный курсор; в противном случае — на локальный курсор. Курсор должен позволять производить обновления.
cursor_variable_name
Имя переменной курсора. Переменная курсора должна содержать ссылку на курсор, обновления которого разрешены.
OPTION ( <query_hint> [ ,... n] )
Ключевые слова, показывающие, что подсказки оптимизатора применяются при настройке способа обработки инструкции компонентом Database Engine..
Замечания
Инструкцию DELETE можно использовать в теле пользовательской функции, если изменяемым объектом является переменная table.
При выполнении инструкции DELETE может произойти ошибка, если она нарушает триггер или пытается удалить строку, на которую ссылаются данные в другой таблице с помощью ограничения FOREIGN KEY. Если инструкция DELETE удаляет несколько строк и одна из удаленных строк нарушает триггер или ограничение, то эта инструкция отменяется, т.е. возвращается ошибка и строки не удаляются.
В случае арифметической ошибки (переполнение, деление на ноль или выход за пределы допустимых значений), возникающей в ходе вычисления выражения при выполнении инструкции DELETE, компонент Database Engine будет обрабатывать эти ошибки, как если бы параметр SET ARITHABORT имел значение ON. Оставшаяся часть пакетной операции отменяется и возвращается сообщение об ошибке.
Значение параметра SET ROWCOUNT не учитывается в инструкциях DELETE для удаленных таблиц и локальных и удаленных секционированных представлений.
При необходимости удаления всех строк в таблице следует использовать инструкцию DELETE без предложения WHERE либо использовать инструкцию TRUNCATE TABLE. Инструкция TRUNCATE TABLE выполняется быстрее, чем инструкция DELETE, и использует меньше системных ресурсов и ресурсов журнала транзакций.