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

Инструкция INSERT советы и хитрости SQL Server

Платформа SQL Server поддерживает для инструкции INSERТ несколько расширений стандарта ANSI. Поддерживается несколько функций для работы с наборами строк (объяснения ниже), а также возможность вставлять результаты из хранимых процедур и расширенных процедур прямо в целевую таблицу. Синтаксис инструкции INSERT в SQL Server следующий.

INSERT [INTO] имя_таблицы [(столбец1 [, …])

{[DEFAULT] VALUES |

VALUES (переменная 1 [, …]) |

инструкция _SELECT |

EXEC[UTE] имя_процедуры {[[параметр =] значение {[OUTPUT]} [, …]]}

Где:

INSERT [INTO] имя_таблицы

Целью для вставки будет таблица, представление или функция, работающая с наборами данных (rowset functions). При вставке в представление инструкция INSERT не может затрагивать более одной базовой таблицы представления, если их несколько. Функции для наборов данных позволяют SQL Server получать данные из специальных или внешних источников, таких, как потоки XML, файловые структуры полнотекстового поиска (особые структуры, которые используются в SQL Server для хранения в базе данных таких вещей, как документы Microsoft Word и презентации MS PowerPoint) и внешних источников данных (таких, как электронные таблицы Microsoft Excel). Примеры приводятся ниже в этом разделе. В настоящее время SQL Server поддерживает для инструкции INSERТ следующие функции для работы с наборами.

ОPEN QUERY

Выполняется транзитная инструкция INSERT для связанного сервера. Это эффективный способ выполнения вложенных инструкций INSERT во внешних по отношению к SQL Server источниках данных. Источник данных должен сначала быть объявлен как связанный сервер.

OPENROWSET

Выполняется транзитная инструкция INSERT для внешнего источника данных. Это предложение сходно с OPENDATASOURCE, за исключением того, что предложение OPENDATASOURCE только открывает источник данных, но не передает в него инструкцию INSERT. Предложение OPENROWSET предназначается только для редкого, специального использования.

столбец! [, …]

Указывается один или несколько столбцов целевой таблицы. Список должен быть заключен в скобки, и его элементы должны разделяться запятыми.

SQL Server

Платформа PostgreSQL пытается выполнить автоматическое приведение типов, если выражения в предложении VALUE или списке элементов подзапроса не совпадают с типами данных, определяемых для целевой таблицы или представления, автоматически вставляет значения в столбцы IDENTITY, TIMESTAMP и столбцы с ограничениями DEFAULT.

DEFAULT

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

EXECfUTE] имя_процедуры {[[@параметр =]значение {[OUTPUT]} [, …]]}

Будет выполнена динамическая инструкция Transact-SQL, хранимая процедура, удаленный вызов процедуры (Remote Procedure Call, RPC) или расширенная хранимая процедура, а результаты будут сохранены в локальной таблице. имя_процедуры — это имя той процедуры, которую вы хотите выполнить. Также вы можете использовать любые параметры хранимой процедуры, указываемые как @параметр (знак @ является обязательным), присваивать значения параметрам и при желании обозначить какой-то параметр как выходной (OUTPUT). Столбцы, возвращаемые в результирующем наборе данных, должны соответствовать по типу столбцам целевой таблицы.

Хотя SQL Server автоматически присваивает значения столбцам IDENTITY a TIMESTAMP, платформа не делает этого для столбцов UNIQUEIDENTIFIER. Любой из столбцов с первыми типами данных вы можете пропустить в списке значений и в списке столбцов, однако нельзя пропускать столбцы UNIQUEIDENTIFIER. Чтобы сгенерировать и вставить глобальный уникальный идентификатор (GUID), вы должны использовать функцию NEWIDQ.

INSERT INTO guid_sample (global_ID, sample_text, sample_int)

VALUES (NEWID(), ‘insert first record’, ‘10000’)

GO

При переносе кода с платформы на платформу помните, что вставка пустой строки в столбцы TEXT и VARCHAR в SQL Server приводит к созданию строки с нулевой длиной. Это не то же самое, что значение NULL, как это интерпретируют некоторые платформы.

В примерах инструкций INSERT…EXEC, приводимых ниже, сначала создается временная таблица с именем #ins_exec_container. После этого операция вставки получает список элементов директории C:temp и сохраняет его во временной таблице, а вторая инструкция INSERТ выполняет динамическую инструкцию SELECT.

CREATE TABLE #ins_exec_container (result_text

VARCHAR(300) NULL) GO

INSERT INTO #ins_exec_container

EXEC master.xp_cmdshell ‘dir c:temp’

GO

INSERT INTO sales

EXECUTE (‘SELECT * FROM sales_2002_Q4’) GO

Такая функциональность может быть весьма полезна в хранимых процедурах, если, например, вы хотите реализовать бизнес-логику при помощи хранимых процедур Transact-SQL, определять состояние объектов в базе данных и вне ее, а затем выполнять какие-то действия на основе этих результатов.

Платформа SQL Server позволяет использовать подсказки оптимизатору, чтобы обойти заданную по умолчанию стратегию оптимизации для инструкций INSERT. Этот тип настройки рекомендуется выполнять только наиболее компетентным пользователям. Полная информация о том, какие подсказки можно использовать с инструкцией INSERT, приводится в доку-ментации производителя.

Источник