Creatio development guide
PDF
Документация по разработке
Описание платформы
Это документация Creatio версии 7.13.0. Мы рекомендуем использовать новую версию документации.

Добавление данных с помощью подзапросов. Класс InsertSelect

Glossary Item Box

Общие сведения

Класс Terrasoft.Core.DB.InsertSelect предназначен для построения запросов на добавление записей в таблицы базы данных bpm'online. При этом в качестве источника добавляемых данных используется экземпляр класса Terrasoft.Core.DB.Select (см. "Получение информации из базы данных. Класс Select"). В результате создания и конфигурирования экземпляра Terrasoft.Core.DB.InsertSelect будет построен запрос базу данных приложения в виде SQL-выражения INSERT INTO SELECT.

ВАЖНО

При работе с классом InsertSelect на добавленные записи не применяются права доступа по умолчанию. К таким записям не применены вообще никакие права приложения (по операциям на объект, по записям, по колонкам). Пользовательское соединение используется только для доступа к таблице базы данных.

ВАЖНО

НА ЗАМЕТКУ

После выполнения запроса InsertSelect в базу данных будет добавлено столько записей, сколько вернется в его подзапросе Select.

Класс Terrasoft.Core.DB.InsertSelect

ВАЖНО

НА ЗАМЕТКУ

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

Конструкторы

  • public InsertSelect(UserConnection userConnection) — создает экземпляр класса с указанным UserConnection.
  • public InsertSelect(InsertSelect source) — создает экземпляр класса, являющийся клоном экземпляра, переданного в качестве аргумента.

Свойства

Табл. 1. — Основные свойства класса

Свойство Тип Описание
UserConnection Terrasoft.Core.UserConnection Пользовательское подключение, используемое при запросе.
Source Terrasoft.Core.DB.ModifyQuerySource Источник данных
Parameters Terrasoft.Core.DB.QueryParameterCollection Коллекция параметров запроса.
HasParameters bool Определяет, имеет ли запрос параметры.
BuildParametersAsValue bool Определяет, добавлять ли параметры запроса в текст запроса как значения.
Columns Terrasoft.Core.DB.ModifyQueryColumnValueCollection Коллекция значений колонок запроса.
Select Terrasoft.Core.DB.Select Используемый в запросе экземпляр Terrasoft.Core.DB.Select.

Методы

Табл. 2. — Основные методы класса

Методы Описание
string GetSqlText() Возвращает SQL-текст запроса.
void BuildSqlText(StringBuilder sb) Формирует текст запроса при помощи экземпляра StringBuilder.
void ResetCachedSqlText() Очищает кэшированный текст запроса.
QueryParameterCollection GetUsingParameters() Возвращает коллекцию параметров, используемых запросом.
void ResetParameters() Очищает коллекцию параметров запроса.
void SetParameterValue(string name, object value)

Устанавливает значение для параметра запроса.

Параметры:

  • name — название параметра;
  • value — значение.

void InitializeParameters()

Инициализирует коллекцию параметров запроса.

int Execute()

Выполняет запрос. Возвращает количество задействованных запросом записей.

int Execute(DBExecutor dbExecutor)

Выполняет запрос, используя экземпляр DBExecutor. Возвращает количество задействованных запросом записей.

InsertSelect Into(string schemaName)

InsertSelect Into(ModifyQuerySource source)

Добавляет в текущий запрос источник данных.

Параметры:

  • schemaName — название схемы;
  • source — источник данных.

InsertSelect Set(IEnumerable<string> sourceColumnAliases)

InsertSelect Set(params string[] sourceColumnAliases)

InsertSelect Set(IEnumerable<ModifyQueryColumn> columns)

InsertSelect Set(params ModifyQueryColumn[] columns)

 

Добавляет в текущий запрос набор колонок, в которые будут добавлены значения с помощью подзапроса. Возвращает текущий экземпляр InsertSelect.

Параметры:

  • sourceColumnAliases — коллекция или массив параметров метода, содержащие псевдонимы колонок;
  • columns — коллекция или массив параметров метода, содержащие экземпляры колонок.

InsertSelect FromSelect(Select subSelect)

InsertSelect FromSelect(Query subSelectQuery)

Добавляет в текущий запрос предложение SELECT.

Параметры:

  • subSelect — подзапрос на выборку;
  • subSelectQuery — подзапрос.

Примеры использования

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

Пример 1

Получить текст SQL запроса.

public string GetSqlTextExample(string contactName, string accountName)
{
    var result = "";
    var id = Guid.NewGuid();
    var select = new Select(UserConnection)
        .Column(Column.Const(contactName))
        .Column("Id")
        .From("Account")
        .Where("Name").IsEqual(Column.Parameter(accountName)) as Select;
    var insel = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(select);

    result = insel.GetSqlText();
    return result;
}

Пример 2

Добавить контакт с указанными именем и названием контрагента.

public string InsertContactWithAccount(string contactName, string accountName)
{
    contactName = contactName ?? "Unknown contact";
    accountName = accountName ?? "Unknown account";
    
    var id = Guid.NewGuid();
    var select = new Select(UserConnection)
            .Column(Column.Const(contactName))
            .Column("Id")
        .From("Account")
        .Where("Name").IsEqual(Column.Parameter(accountName)) as Select;
    var insel = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(select);

    var affectedRows = insel.Execute();
    var result = $"Inserted new contact with name '{contactName}'" +
                $" and account '{accountName}'." +
                $" Affected {affectedRows} rows.";
    return result;
}

Пример 3

Добавить контакт с указанным имененем, связав его со всеми контрагентами.

public string InsertAllAccountsContact(string contactName)
{
    contactName = contactName ?? "Unknown contact";

    var id = Guid.NewGuid();
    var insel = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(
            new Select(UserConnection)
                .Column(Column.Const(contactName))
                .Column("Id")
                .From("Account") as Select);

    var affectedRows = insel.Execute();
    var result = $"Inserted {affectedRows} new contacts with name '{contactName}'";
    return result;
}

 

 

 

 

 

 

 

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?