Определяет временный именованный результирующий набор, также называемый обобщенным табличным выражением, определенным в области инструкции INSERT. Результирующий набор получается из инструкции SELECT.
Обобщенные табличные выражения также используются инструкциями SELECT, DELETE, UPDATE и CREATE VIEW.
TOP (expression) [ PERCENT ]
Задает количество или процент случайных строк для вставки. Выражение expression может быть либо количеством, либо процентом строк. Строки, на которые ссылается выражение TOP, используемое с INSERT, UPDATE и DELETE, не упорядочены.
В инструкциях INSERT, UPDATE и DELETE необходимо разделять круглыми скобками аргумент expression в выражении TOP.
INTO
Необязательное ключевое слово, которое можно использовать между ключевым словом INSERT и целевой таблицей.
server_name
Имя сервера (используется функцией OPENDATASOURCE как имя сервера), на котором находится таблица или представление. Если указан аргумент server_name, также необходимо указать аргументы database_name и schema_name.
database_name
Имя базы данных.
schema_name
Имя схемы, к которой принадлежит таблица или представление.
table_or view_name
Имя таблицы или представления, которые принимают данные.
Переменную table внутри своей области можно использовать как имя исходной таблицы в инструкции INSERT.
Представление, на которое ссылается аргумент table_or_view_name, должно быть обновляемым и ссылаться ровно на одну базовую таблицу в предложении FROM данного представления. Например, инструкция INSERT в многотабличном представлении должна использовать аргумент column_list, который ссылается только на столбцы из одной базовой таблицы..
rowset_function_limited
Либо функция OPENQUERY либо функция OPENROWSET.
WITH ( <table_hint_limited> [... n ] )
Указывает одну или несколько табличных подсказок, разрешенных для целевой таблицы. Необходимо использовать ключевое слово WITH и круглые скобки.
(column_list)
Список из одного или нескольких столбцов, в которые нужно вставить данные. Аргумент column_list должен быть заключен в круглые скобки и разделен запятыми.
Если столбец не внесен в column_list, то компонент SQL Server 2005 Database Engine должен обеспечить значение, основанное на определении столбца; в противном случае строку нельзя будет загрузить. Компонент Database Engine автоматически задает значение для столбца, если столбец имеет следующие характеристики.
· Имеется свойство IDENTITY. Используется следующее значение приращения для идентификатора.
· Имеется стандартное значение. Используется стандартное значение для столбца.
· Имеет тип данных timestamp. В этом случае используется текущее значение timestamp.
· Неопределенное значение. Используется значение Null.
· Вычисляемый столбец. Используется вычисленное значение.
Аргумент column_list и список VALUES необходимо использовать, когда в столбец идентификаторов вставляются явно заданные значения, а параметру SET IDENTITY_INSERT необходимо присвоить значение ON для таблицы.
Предложение OUTPUT возвращает вставленные строки во время операции вставки. Оно не поддерживается инструкциями DML, которые ссылаются на локальные секционированные представления, распределенные секционированные представления, расположенные удаленно таблицы или инструкции INSERT, содержащие аргумент execute_statement.
VALUES
Ввод списка со значениями данных для вставки. Для каждого столбца в column_list, если этот параметр указан или присутствует в таблице, должно быть одно значение. Список значений должен быть заключен в круглые скобки.
Если значения в списке VALUES идут в порядке, отличном от порядка следования столбцов в таблице, или не для каждого столбца таблицы определено значение, то необходимо использовать аргумент column_list для явного указания столбца для хранения каждого входного значения.
DEFAULT
Указывает компоненту Database Engine необходимость принудительно загружать значения по умолчанию, определенные для столбца. Если для столбца не задано значение по умолчанию и он может содержать значение NULL, вставляется значение NULL. В столбцы с типом данных timestamp вставляется следующее значение временной метки. Значение DEFAULT недопустимо для столбца идентификаторов.
expression
Константа, переменная или выражение. В выражении не может содержаться инструкция SELECT или EXECUTE.
derived_table
Любая допустимая инструкция SELECT, возвращающая строки данных, которые загружаются в таблицу. Инструкция SELECT не может содержать обобщенное табличное выражение (CTE).
execute_statement
Любая допустимая инструкция EXECUTE, возвращающая данные с помощью инструкций SELECT или READTEXT. Инструкция SELECT не может содержать CTE-выражение.
Если аргумент execute_statement используется с инструкцией INSERT, каждый результирующий набор должен быть совместим со столбцами в таблице или списке column_list.
Аргумент execute_statement может применяться для выполнения хранимых процедур на том же сервере или на сервере, расположенном удаленно. На удаленном сервере выполняется процедура, результирующий набор возвращается на локальный сервер и загружается в таблицу на локальном сервере.
В SQL Server 2008 изменена семантика транзакций инструкций INSERT...EXECUTE, выполняемых на связанном сервере с замыканием на себя. В SQL Server 2005 этот сценарий не поддерживается и приводит к ошибкам. В SQL Server 2008 инструкция INSERT...EXECUTE может применяться к связанному серверу с замыканием на себя, когда для соединения не включен режим MARS. Если режим MARS не включен для соединения, то поведение такое же, как в SQL Server 2005.
Если аргумент execute_statement возвращает данные с инструкцией READTEXT, необходимо учитывать, что каждая инструкция READTEXT может возвращать не более 1 МБ (1024 КБ) данных. Аргумент execute_statement также может использоваться с расширенными процедурами. В этом случае он вставляет данные, возвращенные основным потоком расширенной процедуры, но выходные данные, возвращенные потоками, отличными от основного, не будут вставлены.
DEFAULT VALUES
Заполняет новую строку значениями по умолчанию, определенными для каждого столбца.
Замечания
Инструкция INSERT добавляет новые строки к таблице. Чтобы заменить данные в таблице, перед загрузкой новых данных с помощью инструкции INSERT необходимо применить инструкции DELETEили TRANCATE TABLE для очистки существующих данных.
Столбцы, созданные с типом данных uniqueidentifier, содержат двоичные 16-байтные величины специального формата. В отличие от столбцов идентификаторов компонента Database Engine не создает автоматически значения для столбцов с типом данных uniqueidentifier. Во время операции вставки переменные с типом данных uniqueidentifier и строковые константы вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 символов, включая дефисы, где x – шестнадцатеричная цифра в диапазоне от 0-9 или a-f) можно использовать для столбцов uniqueidentifier. Например, 6F9619FF-8B86-D011-B42D-00C04FC964FF является допустимым значением переменной uniqueidentifier или столбца. Используйте функцию NEWID() для получения глобального уникального идентификатора (идентификатор GUID).
Инструкции INSERT не учитывает настройки параметра SET ROWCOUNT в местных и расположенных удаленно секционированных представлениях. Также этот параметр не поддерживается инструкциями INSERT для удаленных таблиц в компоненте Database Engine в случае, если уровень совместимости 80 или выше.
Если при выполнении инструкции INSERT возникает арифметическая ошибка (переполнение, деление на ноль или ошибка домена), компонент Database Engine обрабатывает эти ошибки так же, как если бы параметру SET ARITHABORT было присвоено значение ON. Выполнение пакета прекращается и выводится сообщение об ошибке.
При вставке строк применяются следующие правила.
· Если значение загружается в столбцы с типом данных char, varchar или varbinary, то дополнение или усечение конечных пробелов (пробелы для char и varchar, нули для varbinary) определяет параметр SET ANSI_PADDING, определенный для столбца при создании таблицы. В таблице 6.1. показаны операции по умолчанию для параметра SET ANSI_PADDING, установленного в значение OFF.
Таблица 6.1.
Тип данных
Стандартная операция
char
Заполнение значения пробелами до заданной ширины столбца.
varchar
Удаление конечных пробелов до последнего ненулевого символа или до одного пробела, если строка состоит только из пробелов.
varbinary
Удаление конечных нулей.
· Если пустая строка ('') загружена в столбец с типом данных varchar или text, то операцией по умолчанию будет загрузка строки нулевой длины.
· Если инструкция INSERT нарушает ограничение или правило или если в ней содержится значение, несовместимое с типом данных столбца, то инструкция не выполняется и компонент Database Engine выдает сообщение об ошибке.
· Вставка значения NULL в столбец text или image не приводит ни к созданию допустимого текстового указателя, ни к предварительному распределению 8-килобайтной текстовой страницы.
· Если инструкция INSERT загружает несколько строк с помощью инструкций SELECT или EXECUTE, то любые нарушения правил или ограничений, возникающие из-за загружаемых значений, приводят к остановке выполнения всей инструкции, и ни одна из строк не будет загружена.
· Если во время вставки значений в таблицы удаленного экземпляра компонента Database Engine указаны не все значения для всех столбцов, необходимо указать столбцы, в которые вставляются определенные значения.