![](/img/trans.png)
[英]SQL Server Exception:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
[英]Timeout expired the timeout period elapsed SQL Server 2012
我創建此函數來計算短缺物料數量
ALTER FUNCTION [dbo].[ReturnShortageByItemCodeLinePackage]
(@lineId int, @testpackId int, @MaterialDescriptionId int)
RETURNS float
AS BEGIN
DECLARE @shortageQuantity float
DECLARE @MIVQuantity float
DECLARE @totalQuantity float
DECLARE @spoolQuantity float
DECLARE @ExistInSiteQuantity float
DECLARE @BeforeDoneQuantity float
SELECT
@totalQuantity = Quantity,
@spoolQuantity = QuantitySpool,
@ExistInSiteQuantity = QuantityExistInSite,
@BeforeDoneQuantity = QuantityBeforeDone
FROM
[SPMS2].[dbo].Materials
WHERE
LineId = @lineId
AND TestPackageId = @testpackId
AND MaterialDescriptionId = @MaterialDescriptionId
SELECT
@MIVQuantity = SUM(QuantityDeliver)
FROM
MaterialIssueVoucherDetails miv
JOIN
MaterialRequestContractorDetails mrc ON miv.MaterialRequestContractorDetailId = mrc.Id
WHERE
TestPackageId = @testpackId
AND LineId = @lineId
AND miv.MaterialDescriptionId = @MaterialDescriptionId
IF @MIVQuantity IS NULL
BEGIN
SET @MIVQuantity = 0
END
SET @shortageQuantity = @totalQuantity - (@BeforeDoneQuantity + @ExistInSiteQuantity + @spoolQuantity + @MIVQuantity)
RETURN round(@shortageQuantity,3)
END
我可以在存儲過程中使用此功能,如下所示:
ALTER PROCEDURE [dbo].[SPViewMTO]
AS
BEGIN
SELECT
dbo.Lines.Unit, dbo.Lines.LineNumber, dbo.Lines.DocumentNumber,
dbo.BaseMaterials.Name AS MaterialName,
dbo.MaterialDescriptions.Name AS MaterialDescription,
dbo.MaterialDescriptions.Description, dbo.MaterialScopes.ScopeName,
dbo.MaterialScopeObjectNames.ObjectName,
dbo.MaterialDescriptions.Size1, dbo.MaterialDescriptions.Size2,
dbo.MaterialDescriptions.ItemCode,
dbo.Materials.Quantity, dbo.Materials.Discipline, dbo.Materials.Id,
dbo.Lines.Id AS LineId, dbo.Materials.QuantitySpool,
dbo.Materials.QuantityExistInSite, dbo.Materials.QuantityBeforeDone,
dbo.TestPackages.PackageNumber, dbo.Materials.TestPackageId,
ISNULL(dbo.ReturnShortageByItemCodeLinePackage(Lines.Id, TestPackageId, MaterialDescriptionId), 0) AS Shortage
FROM
dbo.Materials
INNER JOIN
dbo.Lines ON dbo.Materials.LineId = dbo.Lines.Id
INNER JOIN
dbo.BaseMaterials ON dbo.Lines.BaseMaterialId = dbo.BaseMaterials.Id
INNER JOIN
dbo.MaterialDescriptions ON dbo.Materials.MaterialDescriptionId = dbo.MaterialDescriptions.Id
INNER JOIN
dbo.MaterialScopes ON dbo.MaterialDescriptions.MaterialScopeId = dbo.MaterialScopes.Id
INNER JOIN
dbo.MaterialScopeObjectNames ON dbo.MaterialDescriptions.MaterialScopeObjectId = dbo.MaterialScopeObjectNames.Id
INNER JOIN
dbo.TestPackages ON dbo.Materials.TestPackageId = dbo.TestPackages.Id
END
直接在SQL Server Management Studio中,存儲過程的執行時間約為47秒,但是當我從C#應用程序中調用存儲過程時,出現此錯誤:
超時過期超時時間已過去SQL Server 2012
這是我的代碼來調用存儲過程:
lst = _ctx.Database.SqlQuery<ViewDomainClass.MaterialOffice.DAViewMTO>
("EXEC [dbo].SPViewMTO").ToList();
超時是ADO.Net和諸如LINQ&EF之類的其他框架中連接字符串的屬性。 嘗試根據需要更改連接字符串中的超時。 您也可以在SQLCommand上設置超時以覆蓋timeout屬性。
使用(NOLOCK)可以提高查詢性能。
ALTER PROCEDURE [dbo].[SPViewMTO]
AS
BEGIN
SELECT dbo.Lines.Unit, dbo.Lines.LineNumber, dbo.Lines.DocumentNumber, dbo.BaseMaterials.Name AS MaterialName,
dbo.MaterialDescriptions.Name AS MaterialDescription, dbo.MaterialDescriptions.Description, dbo.MaterialScopes.ScopeName,
dbo.MaterialScopeObjectNames.ObjectName, dbo.MaterialDescriptions.Size1, dbo.MaterialDescriptions.Size2, dbo.MaterialDescriptions.ItemCode,
dbo.Materials.Quantity, dbo.Materials.Discipline, dbo.Materials.Id, dbo.Lines.Id AS LineId, dbo.Materials.QuantitySpool, dbo.Materials.QuantityExistInSite,
dbo.Materials.QuantityBeforeDone, dbo.TestPackages.PackageNumber, dbo.Materials.TestPackageId,isnull(dbo.ReturnShortageByItemCodeLinePackage(Lines.Id,TestPackageId,MaterialDescriptionId),0) As Shortage
FROM dbo.Materials(NOLOCK) INNER JOIN
dbo.Lines(NOLOCK) ON dbo.Materials.LineId = dbo.Lines.Id INNER JOIN
dbo.BaseMaterials(NOLOCK) ON dbo.Lines.BaseMaterialId = dbo.BaseMaterials.Id INNER JOIN
dbo.MaterialDescriptions(NOLOCK) ON dbo.Materials.MaterialDescriptionId = dbo.MaterialDescriptions.Id INNER JOIN
dbo.MaterialScopes(NOLOCK) ON dbo.MaterialDescriptions.MaterialScopeId = dbo.MaterialScopes.Id INNER JOIN
dbo.MaterialScopeObjectNames(NOLOCK) ON dbo.MaterialDescriptions.MaterialScopeObjectId = dbo.MaterialScopeObjectNames.Id INNER JOIN
dbo.TestPackages(NOLOCK) ON dbo.Materials.TestPackageId = dbo.TestPackages.Id
EnD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.