繁体   English   中英

JDBC执行大型T-SQL查询

[英]JDBC execute big T-SQL query

我有一个很大的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代码从文件读取到String并立即执行此String。

如何使用JDBC for MS SQL Server做到这一点?

您始终可以将此T-SQL代码保存为MSSQL存储过程,并使用JDBC CallableStatement执行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM