查询在C#中占用的时间比SQL

时间:2015-04-28 17:25:57

标签: c# sql .net sql-server

我有一个存储过程需要大约一秒钟来执行,但是,当我在.NET C#上部署它时使用相同的参数,我到达我使用SqlAdapter的部分并使用Fill函数,(使用调试模式) )我按下F11,然后它停留在那里一分钟,直到它最终返回一个数据表,顺便说一下只有一行。

在将C#用于SP而不是SQL时,是否有必须考虑的事项?

特别是查询如下:

ALTER PROCEDURE [dbo].[GAS_consumptions_spFullSearchA] 
(
    @idClient INT, 
    @beginDate DATETIME, 
    @endDate DATETIME, 
    @description VARCHAR(1000), 
    @department VARCHAR(50), 
    @area VARCHAR(50), 
    @idCardType INT, 
    @idProduct INT, 
    @idStation INT, 
    @cardCode VARCHAR(16), 
    @idCostCenter INT, 
    @idSection INT, 
    @idDivision INT, 
    @isManual INT, 
    @idInvoice INT
) 
AS 

SET @description = ISNULL(@description, '') 

SELECT DISTINCT 
    con.idConsumption, 
    cli.idClient, 
    ISNULL(cli.tradename, cli.commercialName) AS tradeName, 
    con.quantity, 
    pro.[description], 
    (con.price + con.iepsPerLiter + (con.price * con.tax) / 100) AS price, 
    (con.subtotal + con.ieps) AS subtotal, 
    con.createdDate AS dateCreated, 
    ISNULL(sta.shortname, 'Corporativo') AS name, 
    ISNULL(nip.idCard, nip2.[idCard]) AS idCard, 
    ISNULL(clc.[name], 'CONSUMO ADMIN.') AS contact, 
    '' AS operationType, 
    con.gasPump, 
    con.tax, 
    con.total, 
    sta.idStation, 
    sta.[name] AS stationName, 
    sta.rfc, 
    con.stationSaleNumber, 
    SUBSTRING (ISNULL(car.cardCode, car2.[cardCode]), 9, 16) AS cardCode, 
    ISNULL (veh.economicNumber, veh2.economicNumber) AS economicNumber, 
    ISNULL (veh.model, veh2.model) AS model, 
    ISNULL (veh.licensePlates, veh2.licensePlates) AS licensePlates, 
    sta.pemexKey, 
    pro.idPemex, 
    con.isManual, 
    mcd.comments, 
    rmc.reasonName, 

    CASE 
        WHEN car.cardCode IS NULL THEN 'Tarjeta' 
        ELSE 'CHEQUE' 
    END AS operation, 

    con.TaxAmount, 
    '1' AS RowType, 
    con.CommissionsAmount, 
    con.notes, 
    con.CommissionsValue, 
    con.CommissionsTaxAmount, 
    cat.[description] AS [type], 

    CASE ISNULL(ico.idInvoice, '-1') 
        WHEN -1 THEN '-1' 
        ELSE cor.series + ' ' + CAST(ico.idInvoice AS NVARCHAR) 
    END AS idInvoice, 

    con.mileage, 
    con.stationSaleNumber AS saleNumber, 
    con.workSchedule AS Turno, 
    ISNULL(car.area, car2.area) AS Area, 
    ISNULL(car.department, car2.department) AS department, 

    CASE ISNULL(ico.idInvoice, '-1') 
        WHEN -1 THEN '-1' 
        ELSE inv.series + RIGHT('000000' + CAST(inv.number AS VARCHAR),6) 
    END AS seriesNumber, 

    CASE ISNULL(con.requestedAmount, '') 
        WHEN '' THEN 0 
        ELSE con.requestedAmount 
    END AS RequestAmount, 

    (
        SELECT cup.serial + CAST(cup.folio AS VARCHAR)+ '($' + CAST(cup.amount AS VARCHAR) + ')  ' 
        FROM CCARD_coupon AS cup 
        WHERE cup.IdConsumption = con.idConsumption 
        FOR XML PATH('')
    ) AS couponConsumtion, 

    ISNULL(con.couponConsumption, 0) AS couponConsumption, 
    ISNULL(coce.name, '') AS costCenter, 
    ISNULL(sec.name, '') AS section, 
    ISNULL(div.name, '') AS division, 

    CASE ISNULL(con.isManual, 0) 
        WHEN 1 THEN 'MANUAL' 
        ELSE cat.[description] 
    END AS [transaction], 

    CASE con.isManual 
        WHEN 1 THEN 'SI' 
        ELSE '' 
    END AS [Manual], 

    CASE ISNULL(ico.idInvoice, '-1') 
        WHEN -1 THEN '' 
        ELSE CONVERT(VARCHAR, inv.createdDate, 120) 
    END AS fechaFactura, 

    cntCls.description AS clasificacion, 
    cntSeg.description AS segmentacion, 
    cntEco.description AS giro, 

    CASE 
        WHEN cct.idClientType IS NULL THEN 'NA' 
        ELSE cct.description 
    END AS tipoCliente, 

    CONVERT(VARCHAR(10), cli.createdDate, 120) AS clienteCreacion, 
    repBilling.name AS RepFacturacion, 
    repSales.name AS RepVentas, 
    repFinance.name AS RepCobranza, 
    cor.idCorporative, 
    con.picture, 
    con.signature, 

    CAST
    (
        CASE 
            WHEN 
            (
                LTRIM(RTRIM(ISNULL(con.picture, ''))) = '' 
                AND LTRIM(RTRIM(ISNULL(con.signature, ''))) = ''
            ) THEN 0 
            ELSE 1 
        END AS BIT
    ) AS imagesAvailable, 

    CAST
    (
        CASE LTRIM(RTRIM(ISNULL(con.picture, ''))) 
            WHEN '' THEN 0 
            ELSE 1 
        END AS BIT
    ) AS pictureAvailable,  

    CAST
    (
        CASE LTRIM(RTRIM(ISNULL(con.signature, ''))) 
            WHEN '' THEN 0 
            ELSE 1 
        END AS BIT
    ) AS signatureAvailable 
FROM 
    GAS_consumptions con WITH(NOLOCK) 
    INNER JOIN GAS_products pro WITH(NOLOCK) ON pro.IdProduct = con.IdProduct 
    LEFT OUTER JOIN GAS_oneTimeNips otn WITH(NOLOCK) ON otn.idOneTimeNip = con.idOneTimeNip 
    LEFT OUTER JOIN [GAS_cardNips] nip2 WITH(NOLOCK) ON nip2.[idNip] = otn.[idNip] 
    LEFT OUTER JOIN GAS_CardNips nip WITH(NOLOCK) ON nip.idNip = con.idNip 
    LEFT OUTER JOIN GAS_ClientContacts clc WITH(NOLOCK) ON clc.idClientContact = nip.idClientContact 
    LEFT OUTER JOIN GAS_Cards car WITH(NOLOCK) ON car.idCard = nip.idCard 
    LEFT OUTER JOIN [GAS_cards] car2 WITH(NOLOCK) ON car2.[idCard] = nip2.[idCard] 
    LEFT OUTER JOIN [GAS_cardTypes] cat WITH(NOLOCK) ON cat.[idCardType] = car.[idCardType] 
    LEFT OUTER JOIN CCARD_stations sta WITH(NOLOCK) ON sta.idStation = con.idStation 
    LEFT OUTER JOIN GAS_Vehicles veh2 WITH(NOLOCK) ON veh2.idVehicle = car2.idVehicle 
    LEFT OUTER JOIN GAS_Vehicles veh WITH(NOLOCK) ON veh.idVehicle = car.idVehicle 
    LEFT OUTER JOIN CCARD_clients cli WITH(NOLOCK) ON cli.idClient = con.idClient 
    LEFT OUTER JOIN CCARD_clientCreditTypes cct WITH(NOLOCK) ON cct.idClientType = dbo.GetClientType(cli.idAccountType, cli.remissionType, cli.isPayToCard, cli.isCoupon) 
    INNER JOIN CCARD_corporatives cor WITH(NOLOCK) ON cor.idCorporative = cli.idCorporative 
    LEFT OUTER  JOIN GAS_invoiceConsumptions ico WITH(NOLOCK) ON ico.idConsumption = con.idConsumption 
    LEFT OUTER JOIN GAS_invoices inv WITH(NOLOCK) ON inv.idInvoice = ico.idInvoice 
    LEFT OUTER JOIN GAS_manualConsumptionDetail mcd WITH(NOLOCK) ON mcd.idConsumption = con.idConsumption 
    LEFT OUTER JOIN GAS_reasonsManualConsumption rmc WITH(NOLOCK) ON rmc.idReason = mcd.idReasonManualConsumption 
    LEFT OUTER JOIN CCARD_divisions div WITH(NOLOCK) ON div.idDivision = con.idDivision 
    LEFT OUTER JOIN CCARD_sections sec WITH(NOLOCK) ON sec.idSection = div.idSection 
    LEFT OUTER JOIN CCARD_costCenters coce WITH(NOLOCK) ON coce.idCostCenter = sec.idCostCenter 
    LEFT OUTER JOIN CCARD_ClientsClassifications cntCls WITH(NOLOCK) ON cntCls.idClientClassification = cli.idClientClassification 
    LEFT OUTER JOIN CCARD_ClientsSegmentations cntSeg WITH(NOLOCK) ON cntSeg.idClientSegmentation = cli.idClientSegmentation 
    LEFT OUTER JOIN CCARD_clientsEconomicActivities cntEco WITH(NOLOCK) ON cntEco.idEconomicActivity = cli.idEconomicActivity 
    LEFT OUTER JOIN PORTA_employees repSales WITH(NOLOCK) ON repSales.idEmployee = cli.salesRepresentative 
    LEFT OUTER JOIN PORTA_employees repBilling WITH(NOLOCK) ON repBilling.idEmployee = cli.billingRepresentative 
    LEFT OUTER JOIN PORTA_employees repFinance WITH(NOLOCK) ON repFinance.idEmployee = cli.financeRepresentative 
WHERE 
    con.idClient = @idClient 
    AND 
    (
        (
            con.createdDate >= @beginDate 
            AND con.createdDate < DATEADD(DAY, 1, @endDate) 
            AND 
            (
                @description IS NULL 
                OR CAST(con.idConsumption AS VARCHAR(100)) LIKE '%' + @description + '%' 
                OR pro.description LIKE '%' + @description + '%' 
                OR sta.[name] LIKE '%' + @description + '%' 
                OR veh.economicNumber LIKE '%' + @description + '%' 
                OR veh.licensePlates LIKE '%' + @description + '%'
            ) 
            AND 
            (
                @idCardType = -1 
                OR cat.idCardType = @idCardType
            ) 
            AND 
            (
                @idProduct = pro.idProduct 
                OR @idProduct = -1
            ) 
            AND 
            (
                sta.idStation = @idStation 
                OR @idStation = -1
            ) 
            AND 
            (
                @cardCode = '-1' 
                OR 
                (
                    car.cardCode LIKE @cardCode 
                    OR car2.cardCode LIKE @cardCode
                )
            ) 
            AND 
            (
                @department IS NULL 
                OR @department = '-1'
                OR @department LIKE car.department
            ) 
            AND 
            (
                @area IS NULL 
                OR @area = '-1'
                OR @area LIKE car.area
            ) 
            AND 
            (
                coce.idCostCenter = @idCostCenter 
                OR @idCostCenter = -1
            ) 
            AND 
            (
                sec.idSection = @idSection 
                OR @idSection = -1
            ) 
            AND 
            (
                div.idDivision = @idDivision 
                OR @idDivision = -1
            ) 
            AND 
            (
                con.isManual = @isManual 
                OR @isManual = -1
            ) 
            AND @idInvoice = -1
        ) 
        OR inv.idInvoice = @idInvoice
    ) 
ORDER BY con.idConsumption

0 个答案:

没有答案