Сохранение данных командами SQL
Специальное предложение: скидка 50% (115 200 рублей) на ODataDB Enterprise до 31 мая 2024

Сохранение данных командами SQL

Для сохранения изменений данных в базу данных можно использовать SQL-команды.

Ниже приведен пример настройки в таблице xls.objects:

IDTABLE_SCHEMATABLE_NAMETABLE_TYPETABLE_CODEINSERT_OBJECTUPDATE_OBJECTDELETE_OBJECT
 s02view_cashbookVIEW<INSERT SQL><UPDATE SQL><DELETE SQL>
 s02usp_cashbookPROCEDURE<INSERT SQL><UPDATE SQL><DELETE SQL>
 s02code_cashbookCODE<SELECT SQL><INSERT SQL><UPDATE SQL><DELETE SQL>

Ниже приведен пример настройки для представления списка запросов:

IDTABLE_SCHEMATABLE_NAMETABLE_TYPETABLE_CODEINSERT_PROCEDUREUPDATE_PROCEDUREDELETE_PROCEDUREPROCEDURE_TYPE
 s02view_cashbookVIEW<INSERT SQL><UPDATE SQL><DELETE SQL>
 s02usp_cashbookPROCEDURE<INSERT SQL><UPDATE SQL><DELETE SQL>
 s02code_cashbookCODE<SELECT SQL><INSERT SQL><UPDATE SQL><DELETE SQL>

Примеры SQL-кода приведены ниже.

Детали реализации

SaveToDB и DBEdit выполняют заданный SQL-код для операций вставки, обновления и удаления.

DBGate выполняет заданный SQL-код на стороне сервера в соответствии с командами POST, PUT и DELETE.

ODataDB создает объекты EntitySet для представлений и FunctionImport, которые возвращают EntitySet, для процедур и объектов на основе SQL-кода.

Параметры команд SQL

Команды SQL могут иметь параметры, которые получают значения в соответствии со следующими правилами:

  1. значения из колонок данных с тем же именем. Например, параметры @id и @name получают значения из колонок id и name;
  2. значения параметров запроса с тем же именем. Например, параметр @account_id может использовать параметр @account_id запроса данных;
  3. значения именованных ячеек Excel. Например, параметр @customer_id из именованной ячейки customer_id (только в надстройке SaveToDB);
  4. специальные контекстные значения, как @rownum или @transaction_id.

SaveToDB 10+, DBEdit, DBGate и ODataDB также позволяют использовать параметры с префиксом source_, которые получают исходные значения колонок данных.

В некоторых случаях, колонки таблицы данных могут иметь имена, которые нельзя использовать как имена параметров. Например, "customer name".

В этом случае, можно заменить запрещенные символы в именах параметров на вариант в XML-кодировке. Например, "customer_x0020_name".

См. Соглашение по именам параметров.

См. также Контекстные параметры.

Примеры команд SQL для сохранения данных

Ниже приведены примеры команд SQL для получения и сохранения данных для всех поддерживаемых платформ баз данных.

Обратите внимание, что SQL Server, SQL Server Compact и SQLite используют параметры с префиксом @, тогда как остальные платформы с префиксом в виде двоеточия.

SQL Server | MySQL | PostgreSQL | Oracle | DB2 | NuoDB | Snowflake | SQL CE | SQLite

Примеры команд SQL для Microsoft SQL Server

Код SELECT:

SELECT
    t.id
    , CAST(t.[date] AS datetime) AS [date]
    , t.account_id
    , t.item_id
    , t.company_id
    , t.debit
    , t.credit
FROM
    s02.cashbook t
WHERE
    COALESCE(@account_id, t.account_id, -1) = COALESCE(t.account_id, -1)
    AND COALESCE(@item_id, t.item_id, -1) = COALESCE(t.item_id, -1)
    AND COALESCE(@company_id, t.company_id, -1) = COALESCE(t.company_id, -1)

Код INSERT:

INSERT INTO s02.cashbook
    ([date], account_id, item_id, company_id, debit, credit)
VALUES
    (@date, @account_id, @item_id, @company_id, @debit, @credit)

Код UPDATE:

UPDATE s02.cashbook
SET
    [date] = @date
    , account_id = @account_id
    , item_id = @item_id
    , company_id = @company_id
    , debit = @debit
    , credit = @credit
WHERE
    id = @id

Код DELETE:

DELETE FROM s02.cashbook WHERE id = @id

Примеры команд SQL для MySQL and PostgreSQL

Код SELECT:

SELECT
    t.id
    , t.date
    , t.account_id
    , t.item_id
    , t.company_id
    , t.debit
    , t.credit
FROM
    s02.cashbook t
WHERE
    COALESCE(:account_id, t.account_id, -1) = COALESCE(t.account_id, -1)
    AND COALESCE(:item_id, t.item_id, -1) = COALESCE(t.item_id, -1)
    AND COALESCE(:company_id, t.company_id, -1) = COALESCE(t.company_id, -1)

Код INSERT:

INSERT INTO s02.cashbook
    ([date], account_id, item_id, company_id, debit, credit)
VALUES
    (:date, :account_id, :item_id, :company_id, :debit, :credit)

Код UPDATE:

UPDATE s02.cashbook
SET
    [date] = :date
    , account_id = :account_id
    , item_id = :item_id
    , company_id = :company_id
    , debit = :debit
    , credit = :credit
WHERE
    id = :id

Код DELETE:

DELETE FROM s02.cashbook WHERE id = :id

Примеры команд SQL для Oracle Database, IBM DB2, NuoDB, and Snowflake

Код SELECT:

SELECT
    t.ID
    , t."DATE"
    , t.ACCOUNT_ID
    , t.ITEM_ID
    , t.COMPANY_ID
    , t.DEBIT
    , t.CREDIT
FROM
    S02.CASHBOOK t
WHERE
    COALESCE(:ACCOUNT_ID, t.ACCOUNT_ID, -1) = COALESCE(t.ACCOUNT_ID, -1)
    AND COALESCE(:ITEM_ID, t.ITEM_ID, -1) = COALESCE(t.ITEM_ID, -1)
    AND COALESCE(:COMPANY_ID, t.COMPANY_ID, -1) = COALESCE(t.COMPANY_ID, -1)

Код INSERT:

INSERT INTO S02.CASHBOOK
    ([DATE], ACCOUNT_ID, ITEM_ID, COMPANY_ID, DEBIT, CREDIT)
VALUES
    (:DATE, :ACCOUNT_ID, :ITEM_ID, :COMPANY_ID, :DEBIT, :CREDIT)

Код UPDATE:

UPDATE S02.CASHBOOK
SET
    "DATE" = :DATE
    , ACCOUNT_ID = :ACCOUNT_ID
    , ITEM_ID = :ITEM_ID
    , COMPANY_ID = :COMPANY_ID
    , DEBIT = :DEBIT
    , CREDIT = :CREDIT
WHERE
    ID = :ID

Код DELETE:

DELETE FROM S02.CASHBOOK WHERE ID = :ID

Примеры команд SQL для SQL Server Compact and SQLite

Код SELECT:

SELECT
    t.id
    , t.date
    , t.account_id
    , t.item_id
    , t.company_id
    , t.debit
    , t.credit
FROM
    cashbook t
WHERE
    COALESCE(@account_id, t.account_id, -1) = COALESCE(t.account_id, -1)
    AND COALESCE(@item_id, t.item_id, -1) = COALESCE(t.item_id, -1)
    AND COALESCE(@company_id, t.company_id, -1) = COALESCE(t.company_id, -1)

Код INSERT:

INSERT INTO cashbook
    (date, account_id, item_id, company_id, debit, credit)
VALUES
    (@date, @account_id, @item_id, @company_id, @debit, @credit)

Код UPDATE:

UPDATE s02.cashbook
SET
    date = @date
    , account_id = @account_id
    , item_id = @item_id
    , company_id = @company_id
    , debit = @debit
    , credit = @credit
WHERE
    id = @id

Код DELETE:

DELETE FROM s02.cashbook WHERE id = @id