我有一个存储过程需要大约一秒钟来执行,但是,当我在.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