SELECT


Главная - Примеры разработки 1С - SELECT

SELECT [ALL | DISTINCT] select_list
[INTO [new_table_name]]
[FROM {table_name | view_name}[(optimizer_hints)]
[[, {table_name2 | view_name2}[(optimizer_hints)]
[..., {table_name16 | view_name16}[(optimizer_hints)]]]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[COMPUTE clause]
[FOR BROWSE]
Производит выборку данных из БД или присваивает значения переменным, причем выборка данных и присваивание значений не могут производиться одновременно. При установленной опции select into/bulkcopy сервера после ключевого слова INTO может идти имя новой таблицы - она будет создана и в нее будут помещены данные, выбираемые этим оператором; если же эта опция не установлена, то в качестве таблицы-получателя может выступать только временная таблица.
!
Впрочем, этой особенностью не стоит пользоваться - при больших выборках происходит смертельная блокировка таблиц tempdb..sysobjects, tempdb..sysindexes и tempdb..syscolumns,и, таким образом, всего tempdb, причем настолько здорово, что сервер приходится останавливать с помощью команды SHUTDOWN WITH NOWAIT. Для более точной настройки пути выборки данных можно указывать т.н. optimizer hints - подсказки оптимизатору. Вот они:
INDEX = {index_name | index_id}
Указывает индекс, который будет использован для выборки данных из такблицы. Если указать вместо имени или идентификатора индекса 0, то будет произведено сканирование таблицы.
NOLOCK
Включает режим "грязного чтения",
HOLDLOCK
Указывает, что блокировки следует сохранять до конца транзакции.
UPDLOCK
Блокирует "блокировками обновления", а не разделяемыми блокировками, сохраняя их до конца транзакции.
TABLOCK
Блокирует таблицу в разделяющем режиме. Если используется вместе с HOLDLOCK, то блокировки сохраняюся до конца транзакции.
PAGLOCK
Блокирует разделяемой блокировкой на страничном уровне в тех случаях, когда блокировка была бы на всю таблицу.
TABLOCKX
Блокирует таблицу в исключающем режиме до конца BATCH или до конца транзакции.
FASTFIRSTROW
Указвает оптимизатору, что необходимо использовать некластеризованный индекс (конечно, если существует подходящий) для выборки данных в порядке, задаваемом ORDER BY даже в том случае, если оптимизатор, сравнив затраты на выборку с помощью индекса и произвольной выборкой и последующей сортировкой находит более выгодым использование сортировки.
В одном операторе SELECT не может участвовать более 16 таблиц, включая подзапросы.