JDBC выполняет большой запрос T-SQL

У меня есть большой SQL-скрипт с созданием временных таблиц и вставкой в ​​них данных из выбора данных из других таблиц, много вставок, например

SET @EndDate = DATEADD(dd, -1, @EndDate);

DECLARE @EndDatePlusOneDay SMALLDATETIME
SET @EndDatePlusOneDay = DATEADD(dd, 1, @EndDate);

CREATE TABLE #cntrs
(
    ContractID             DSIDENTIFIER,
    ContractDateFrom       dsdatetime,
    ContractNumber         dsvarfullname40,
    ContractClientID       DSIDENTIFIER,
    ContractClientName     VARCHAR(500),
    CreditDateTo           dsdatetime,
    Amount                 dsmoney,
    LoanDept               dsmoney,
    PledgeRate             dsmoney,
    CollatVal              dsmoney,
    WarrantyType           dsfullname,
    WarrantyNumber         VARCHAR(20),
    WarrantyDate           dsoperday,
    WarrantyQty            dsmoney,
)

INSERT INTO #cntrs
SELECT c.ContractID,
       cc.CreditDateFrom,
       c.Number,
       ti.InstitutionID,
       (
           CASE 
                WHEN ti.PropDealPart = 0 THEN ti.Name + ' ' + ti.Name1 + ' ' +
                     ti.Name2 + ' '
                ELSE ti.Name
           END
       )              AS ContractClientName,
       cc.CreditDateTo,
       c.Amount,
       0              AS LoanDept,
       70             AS PledgeRate,
       0              AS CollatVal,
       '' AS             WarrantyType,
       '' AS             WarrantyNumber,
       '19000101' AS     WarrantyDate,
       0              AS WarrantyQty
FROM   dataTable1 c(NOLOCK)
       INNER JOIN dataTable2 cc(NOLOCK)
            ON  c.ContractID = cc.ContractCreditID
       INNER JOIN dataTable3 o(NOLOCK)
            ON  c.ContractID = o.ID
            AND o.ObjectTypeID = 105
       INNER JOIN dataTable4 p(NOLOCK)
            ON  o.CurrProtocolID = p.ProtocolID
       INNER JOIN dataTable5 t(NOLOCK)
            ON  p.TransitionID = t.TransitionID
       INNER JOIN dataTable6 n(NOLOCK)
            ON  t.TargetStateID = n.NodeID
       INNER JOIN dataTable7 ti WITH(NOLOCK)
            ON  ti.InstitutionID = c.InstitutionID
WHERE  1 = 1
       --  AND @BranchID IN (0, ISNULL(NULLIF(c.BranchExtId, 0), c.BranchID))
       AND n.Brief IN ('Предоставл', 'НеОплВовр', 'Завершен')
       AND cc.CreditDateFrom BETWEEN @StartDate AND @endDate
ORDER BY
       cc.CreditDateFrom


IF OBJECT_ID('tempdb..#AccInner') IS NOT NULL
    DROP TABLE #AccInner

CREATE TABLE #AccInner
(
    ContractID     NUMERIC(15, 0),
    ResourceID     NUMERIC(15, 0)
)

CREATE UNIQUE INDEX x1 ON #AccInner(ContractID)


DECLARE @DepParentID        DSIDENTIFIER,   -- Субконто КатегорияСредств
        @DepRepaymentID     DSIDENTIFIER,   -- Субконто ТипОперВУ - Упл/Погаш
        @DepAccrualID       DSIDENTIFIER   -- Субконто ТипОперВУ - Выд/Нач

SELECT @DepParentID = d.DepartmentID
FROM   tDepartment d(NOLOCK INDEX = XAK3tDepartment)
WHERE  d.Brief = 'КатСрдств'


UPDATE c
SET    c.CollatVal = c.LoanDept * (c.PledgeRate / 100)
FROM   #cntrs c 

SELECT *
FROM   #cntrs
ORDER BY
       ContractDateFrom

Мне нужно выполнить этот код T-SQL в одном пакетном запросе. Я планирую прочитать код T-SQL из файла в строку и сразу же выполнить эту строку.

Как я могу сделать это с помощью JDBC для MS SQL Server?


person Arthur    schedule 29.04.2015    source источник


Ответы (1)


Вы всегда можете сохранить этот код T-SQL как хранимую процедуру MSSQL и выполнить его с помощью JDBC CallableStatement.

person Szarpul    schedule 29.04.2015