Изменение содержимого таблиц
В дополнение к оператору select, который был описан, существуют три других оператора DML: insert, update и delete. Как и оператор select, эти три оператора модификации оперируют либо таблицами, либо представлениями. В данной главе обсуждаются эти операторы в работе с таблицами и даются примеры их использования. Дополнительно рассматриваются два других оператора: truncate table и merge. В то время как оператор truncate table является расширением в языке Transact-SQL стандарта SQL, оператор merge - новая и стандартизованная возможность в SQL Server 2008.
Оператор insert добавляет строки (или части строк) в таблицу. Он имеет две различные формы: insert [into] tab_name [(col_list)] default values i values ([default | null | expression) {, ...}); insert into tab_name \ view_name [{col_list)] {оператор_вы6орки \ выполняемый_оператор) При использовании первой формы только одна строка (или ее часть) добавляется в таблицу tab_name. Во второй форме оператор insert добавляет результирующий набор, полученный от оператора select или от хранимой процедуры, которая выполняется при использовании оператора execute. Хранимая процедура должна вернуть данные, которые затем добавляются в таблицу. Оператор select может выбирать значения из другой или той же самой таблицы в качестве источника данных…
В обеих формах оператора insert явное задание списка столбцов не является обязательным. Это означает, что отсутствие списка столбцов эквивалентно заданию списка всех столбцов таблицы. Опция default values позволяет добавить значения по умолчанию во все столбцы таблицы. Если столбец имеет тип данных timestamp или содержит в описании свойство identity, то в него будет добавлено значение, автоматически созданное системой. Для других типов данных столбец устанавливается в непустое значение по умолчанию, если в описании столбца таблицы задано значение по умолчанию, или в null, если такое значение не задано. Если столбец не допускает пустого значения и для него не указано значение default, то оператор…
Вторая форма оператора insert добавляет одну строку или несколько строк, полученных из подзапроса. В примере 7.8 показано, как множество строк может быть добавлено в таблицу при использовании второй формы оператора insert. Новая таблица daiias_dept, создаваемая в примере 7.8, имеет те же самые столбцы, что и таблица department, за исключением столбца location. Подзапрос в операторе insert выбирает все строки со значением Dallas в столбце location. Выбранные строки последовательно добавляются в новую таблицу. Содержимое таблицы daiiasdept может быть получено при помощи следующего оператора select: select * from dallas_dept; Пример 7.9 тоже показывает, как может быть добавлено множество строк с использованием…
SQL Server 2008 вводит новую возможность, называемую конструктором значения таблицы (или столбца), которая позволяет вам присваивать отдельные кортежи (строки) оператору DML, такому как insert или delete. В примере 7.10 показано, как вы можете присваивать отдельные строки, используя подобный конструктор с оператором insert. Оператор insert в примере 7.10 за один раз добавляет три строки в таблицу department, используя конструктор значения таблицы. Как вы можете видеть из этого примера, синтаксис конструктора достаточно простой. Для использования конструктора значения таблицы задайте список значений каждой строки, заключенных в круглые скобки, и отделяя один список от другого запятой.
Оператор update изменяет значения в строках таблицы. Этот оператор имеет следующую общую форму: update tab_name {set column_l = {expression | default | null}} [, ...n] [from tab_namel [, ...n]] [where condition] Строки в таблице tab_name изменяются в соответствии с предложением where. Для каждой изменяемой строки оператор update изменяет значения столбцов в предложении set, присваивая соответствующим столбцам константы (или, в общем случае, выражения). Если предложение where отсутствует, оператор update изменяет все строки таблицы. (Предложение from будет рассматриваться позже в этом разделе.) Рассмотрим пример 7.11. Здесь оператор update изменяет в точности одну строку таблицы works_on, потому что комбинация столбцов emp_no…
Оператор delete удаляет из таблицы строки. Этот оператор имеет две различные формы: delete from table_name [where predicate]; delete table_name from table_name [, ...] [where condition]; Все строки, которые удовлетворяют условию в предложении where, будут удалены. Нет необходимости (и не требуется) явно указывать столбцы в операторе delete, потому что оператор delete оперирует строками, а не столбцами. Рассмотрим пример 7.16. Предложение where в операторе delete может содержать внутренний запрос (пример 7.17). Пример 7.17 также может быть переформулирован с использованием предложения from, как показано в примере 7.18. Это предложение имеет ту же семантику, что и предложение from в операторе update.…
Язык Transact-SQL также поддерживает оператор truncate table. Этот оператор предоставляет «быстрое выполнение» версии оператора delete, не содержащего предложения where. Оператор truncate table удаляет все строки таблицы гораздо быстрее, чем это сделает оператор delete, потому что он удаляет содержимое таблицы страница за страницей, в то время как delete удаляет содержимое строка за строкой. Оператор truncate table имеет следующую форму: truncate table table_name
Результат выполнения операторов insert, update или delete всегда содержит только текст, в котором присутствуют только сведения о количестве измененных строк (например, «3 rows deleted» - «Удалено 3 строки»). Если содержимое такого результата вас не устраивает, вы можете использовать предложение output, которое позволяет явно отображать строки, которые были добавлены, изменены в таблице или удалены из нее. Предложение output использует таблицы inserted и deleted для отображения соответствующего результата. В примере 7.20 показано, как работает предложение output с оператором delete. Во-первых, здесь объявляется переменная типа таблицы @del_tabie с двумя столбцами: empno и emp_iname. Эта таблица будет использована для хранения удаленных строк.…
SQL Server 2008 вводит SQL-оператор merge. Этот оператор объединяет последовательность условных команд insert и update в одном атомарном операторе в зависимости от существования записи. Основной областью приложения оператора merge является хранилище данных, где нужно периодически обновлять таблицы с учетом вновь приходящих данных от систем оперативной обработки транзакций (OLTP, online transaction processing). Эти новые данные могут содержать изменения для существующих строк таблиц и/или новые строки, которые нужно добавить. Если строка в новых данных соответствует элементу, который уже существует в таблице, то выполняется оператор update. В противном случае выполняется оператор insert. В версиях, предшествующих SQL Server 2008, эти операции выполнялись либо как…
Вообще, существуют только три оператора SQL, которые могут быть использованы для изменения таблицы: insert, update и delete. Они являются основными для главных операций работы с данными: для добавления строки вы используете только один оператор - insert. То же самое верно относительно изменения столбцов или удаления строк при помощи операторов update и delete соответственно. Нестандартный оператор truncate table является всего лишь другой формой оператора delete, однако удаление строк выполняется быстрее при использовании truncate table, чем при delete. Оператор merge является, скорее всего, оператором «upsert» (update + insert): он объединяет операторы update и insert в одном операторе. Все операторы, которые принадлежат DDL…
© 2021 serversql.ru. Все права защищены.