Какой из методов встроенного sql правильный: Руководство по архитектуре обработки запросов — SQL Server

Содержание

Механизм запросов


Механизм запросов — это один из способов доступа к данным, которые поддерживает платформа. Используя этот механизм, разработчик может читать и обрабатывать данные, хранящиеся в информационной базе; изменение данных с помощью запросов невозможно. Это объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных.

Табличный способ доступа к данным


Запросы реализуют табличный способ доступа к данным, которые хранятся в базе данных. Это означает, что все данные представляются в виде совокупности связанных между собой таблиц, к которым можно обращаться как по-отдельности, так и к нескольким таблицам во взаимосвязи:


Такой способ работы с данными позволяет получать сложные выборки данных, сгруппированные и отсортированные определенным образом. Для этих выборок могут быть рассчитаны общие и промежуточные итоги, наложены ограничения на количество или состав записей и пр.

Язык запросов


Для того чтобы разработчик имел возможность использовать запросы для реализации собственных алгоритмов, в платформе реализован язык запросов. Этот язык основан на SQL, но при этом содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений. Можно перечислить наиболее существенные возможности, реализуемые языком запросов:

Обращение к полям через точку (».»)


Если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через «.», при этом количество уровней вложенности таких ссылок система не ограничивает.

Обращение к вложенным таблицам (табличным частям документов и элементов справочников)


Система поддерживает обращения к вложенным табличным частям и как к отдельным таблицам, и как к целым полям одной таблицы. Например, при обращении к документу Реализация товаров (содержащему табличную часть Товары с составом отгружаемых товаров), мы можем считать табличную часть как отдельную таблицу:


Но также мы можем считать заголовочную запись документа, в которой значением поля Товары будут все записи вложенной таблицы, подчиненные этому объекту (документу):


Автоматическое упорядочивание


Для выбора наиболее правильного («естественного») порядка вывода информации на экран или в отчет разработчику в большинстве случаев достаточно задать режим автоматического упорядочивания.

Многомерное и многоуровневое формирование итогов


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

Поддержка виртуальных таблиц


Виртуальные таблицы, предоставляемые системой, позволяют получить практически готовые данные для большинства прикладных решений без необходимости составления сложных запросов. Например, такая виртуальная таблица может предоставить данные по остаткам товаров в разрезе периодов на какой-то момент времени. При этом виртуальные таблицы максимально используют хранимую информацию, например, ранее рассчитанные итоги и т. д.

Стандартные SQL операции


В языке запросов поддерживаются стандартные для SQL операции, такие, как объединение (Union), соединение (Join) и т. д.

Временные таблицы


Язык запросов позволяет использовать в запросах временные таблицы. С их помощью можно повысить производительность запросов, в некоторых случаях снизить количество блокировок и сделать текст запроса более легким для восприятия.


Предположим, нужно получить данные из двух регистров накопления. Данные из одного регистра поместим во временную таблицу:


Запрос, использующий временную таблицу, будет иметь вид:

Пакетные запросы


Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами — таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных символом «;». Запросы исполняются один за другим. Результатом выполнения пакетного запроса в зависимости от используемого метода будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.

Конструкторы запроса


Для облегчения труда разработчика технологическая платформа содержит два специальных конструктора. Они служат для того, чтобы помочь разработчику составить правильный текст запроса, используя только визуальные средства. Выбирая мышью нужные поля таблиц, разработчик может составить работоспособный запрос, даже не зная синтаксиса языка запросов.

  • Конструктор запроса позволяет составить только текст запроса. Подробнее…
  • Конструктор запроса с обработкой результата помимо текста запроса формирует фрагмент программного кода, который исполняет запрос и выводит результаты в табличный документ или диаграмму. Подробнее…

Консоль запросов


Инструмент «Консоль запросов» позволяет разработчикам конфигураций и специалистам по внедрению отлаживать запросы и просматривать результаты их выполнения в режиме «1С:Предприятие 8». Подробнее…

Язык запросов «1С:Предприятия 8» (+диск)


Авторы: Е.Ю. Хрусталева

Фрагментация базы данных: основные методы и случаи использования

Исходная таблица
CUSTOMER IDFIRST NAMELAST NAMEFAVORITE COLOR
1TAEKOOHNUKIBLUE
2O.V.WRIGHTGREEN
3SELDABAGCANPURPLE
4JIMPEPPERAUBERGINE

Вертикальное секционирование
VP1VP2
CUSTOMER IDFIRST NAMELAST NAMECUSTOMER IDFAVORITE COLOR
1TAEKOOHNUKI1BLUE
2O. V.WRIGHT2GREEN
3SELDABAGCAN3PURPLE
4JIMPEPPER4AUBERGINE

Горизонтальное секционирование
HP1
CUSTOMER IDFIRST NAMELAST NAMEFAVORITE COLOR
1TAEKOOHNUKIBLUE
2O.V.WRIGHTGREEN
HP2
3SELDABAGCANPURPLE
4JIMPEPPERAUBERGINE

Ключ
Столбец1Столбец2Столбец3
A
B
C
D

Сегмент1

Столбец1Столбец2Столбец3
Столбец1Хеш-значения

A
Хеш-функция

A1C
B2

C1

Сегмент2
D2Столбец1Столбец2Столбец3
B
D

PRODUCTPRICE
WIDGET$118
GIZMO$88
TRINKET$37
THINGAMAJIG$18
DOODAD$60
TCHOTCHKE$999

($0-$49. 99)

($50-$99.99)

($100+)

PRODUCTPRICEPRODUCTPRICEPRODUCTPRICE
TRINKET$37GIZMO$88WIDGET$118
THINGAMAJIG$18DOODAD$60TCHOTCHKE$999

PRE-SHARDED TABLE

DELIVERY ZONEFIRST NAMELAST NAME
3DARCYCLAY
1DENISELASALLE
2HIROSHIYOSHIMURA
4KIRSTYMACCOLL

S1

1DENISELASALLE
DELIVERY ZONESHARD ID

S2

1S12HIROSHIYOSHIMURA
2S2
3S3

S3

4S43DARCYCLAY
S4
4KIRSTYMACCOLL

1

2

3

4

5

6

7

8

9 9 0003

10

11

СОЗДАТЬ ФУНКЦИЮ [dbo].[udfGetProductList]

(@SafetyStockLevel SMALLINT

)

ТАБЛИЦА ВОЗВРАТА

AS

ВОЗВРАТ 9000 3

(ВЫБРАТЬ Product.ProductID,

        Product.Name,

        Product.Number

ИЗ Производство.Продукт

ГДЕ SafetyStockLevel >= @SafetyStockLevel)

Функция CREATE udfGetProductList

(@SafetyStockLevel SMALLINT)

ТАБЛИЦА ВОЗВРАТА

1

2

3

4

5

6

ВОЗВРАТ

(ВЫБРАТЬ Product.ProductID,

        Product.Name,

        Product.ProductNumber

FROM Production.Product

WHERE SafetyStockLevel >= @SafetyStockLevel)

ВЫБЕРИТЕ *

ИЗ dbo.udfGetProductList(100)

ВЫБЕРИТЕ *

ИЗ dbo.udfGetProductList( 100 )

ГДЕ Имя КАК ‘Chainring%’

1

2

3

4

5

6

ВЫБЕРИТЕ PUdfList.ProductNumber, PUdfList.Name, PCost.StandardCost

FROM dbo.udfGetProductList( 100 ) AS PUdfList

   INNER JOIN

   Production.ProductC ostHistory AS PCost

   ON PUdfList.ProductId = PCost.ProductID

ГДЕ PUdfList .Id продукта = 717

1

2

3

4

5

6

7

8

9 9 0003

10

11

12

ALTER FUNCTION [dbo].[udfGetProductList]

(@SafetyStockLevel SMALLINT, @MFlag BIT=0

)

ТАБЛИЦА ВОЗВРАТА

AS

9000 2 ВОЗВРАТ

(ВЫБРАТЬ Product.ProductID,

        Product.Name,

        Product.ProductNumber

FROM Production.Product

WHERE SafetyStockLevel >= @SafetyStockLevel

AND MakeFlag=@MFlag )

ВЫБЕРИТЕ *

ИЗ dbo.udfGetProductList(100, ПО УМОЛЧАНИЮ)

  • СОЗДАТЬ ТИП ProductNumberList КАК ТАБЛИЦУ

    (

    ProductNum nvarchar(25)

    )

  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    900 02 11

    12

    13

    14

    ALTER FUNCTION [dbo]. [udfGetProductList](

             @SafetyStockLevel SMALLINT, @MFlag BIT= 0, @ProductList ProductNumberListList ТОЛЬКО ДЛЯ ЧТЕНИЯ)

    ТАБЛИЦА ВОЗВРАТОВ

    AS

    RETURN

    (ВЫБРАТЬ Product.ProductID, Product.Name , Product.ProductNumber

    FROM Production.Product

    WHERE SafetyStockLevel >= @SafetyStockLevel

         AND MakeFlag = @MFlag

         AND Product.ProductNumber IN

    (

       SELECT ProductNum

       FROM @ProductList

    ))

  • ОБЪЯВИТЬ @TempProductList AS ProductNumberList

    ВСТАВИТЬ В @TempProductList

    ЗНАЧЕНИЯ (‘EC-R098’), (‘EC-T209’)

     

    SELECT * FROM [dbo].[udfGetProductList](100,1, @TempProductList)