我需要關於存儲過程的幫助當涉及到數據庫時,我是一個完整而徹底的noob。我有一個客戶需要修復的程序,它是由另一個開發人員製作的,客戶似乎無法與之聯繫。逆向工程在SQL Server 2000上運行的存儲過程
這個客戶擁有這個程序,並且授予我完整的權利去做任何我喜歡的事情。問題是,這個程序使用水晶報表,並且一個特定的報告給我帶來麻煩,是StockAndSales。此報告從存儲過程填充。但問題是,即使在清空數據庫中的所有表後,報告仍顯示一些不應存在的字段。
該程序是基於.net的應用程序。
對不起,這個noobish後,但我是新來的。
P.S這個程序不是我寫的!
的程序是:
CREATE PROCEDURE GetStockAndSales
@StartDate Varchar(10),
@EndDate Varchar(10)
As
Begin
SELECT T1.Item, dbo.Items.Name, T2. NetPPrice, SUM(T1.O) AS O, SUM(T1.P1) AS P1, SUM(T1.P2) AS P2, SUM(T1.P3) AS P3, SUM(T1.S1) AS S1, SUM(T1.S2) AS S2, SUM(T1.S3) AS S3,SUM(T1.SR1) AS SR1, SUM(T1.SR2) AS SR2, SUM(T1.SR3) AS SR3, SUM(T1.D) AS D
FROM (SELECT Item, SUM(Q) AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM (SELECT PD.Item, SUM(PD.Quantity) AS Q
FROM Purchase P INNER JOIN
PurchaseDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] < @StartDate)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, - (SUM(PD.Quantity)) AS Q
FROM Sales P INNER JOIN
SalesDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] < @StartDate)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, SUM(PD.Quantity) AS Q
FROM Sales P INNER JOIN
SalesReturns PD ON P.Invoice = PD.Invoice
WHERE (PD.[Date] < @StartDate)
GROUP BY PD.Item
UNION ALL
SELECT Item, - (SUM(Quantity)) AS Q
FROM Damage D
WHERE ([Date] < @StartDate)
GROUP BY Item) T
GROUP BY Item
UNION ALL
SELECT PD.Item, 0 AS O, SUM(PD.Quantity) AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Purchase P INNER JOIN
dbo.PurchaseDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 1)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, 0 AS O, 0 AS P1, SUM(PD.Quantity) AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Purchase P INNER JOIN
dbo.PurchaseDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 2)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, 0 AS O, 0 AS P1, 0 AS P2, SUM(PD.Quantity) AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Purchase P INNER JOIN
dbo.PurchaseDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 3)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, SUM(PD.Quantity) AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Sales P INNER JOIN
dbo.SalesDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 1)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, SUM(PD.Quantity) AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Sales P INNER JOIN
dbo.SalesDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 2)
GROUP BY PD.Item
UNION ALL
SELECT PD.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, SUM(PD.Quantity) AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.Sales P INNER JOIN
dbo.SalesDetails PD ON P.Invoice = PD.Invoice
WHERE (P.[Date] BETWEEN @StartDate And @EndDate) AND (P.Company = 3)
GROUP BY PD.Item
UNION ALL
SELECT dbo.SalesReturns.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, SUM(dbo.SalesReturns.Quantity) AS SR1, 0 AS SR2, 0 AS SR3, 0 AS D
FROM dbo.SalesReturns INNER JOIN
dbo.Sales ON dbo.SalesReturns.Invoice = dbo.Sales.Invoice
WHERE (dbo.SalesReturns.[Date] BETWEEN @StartDate And @EndDate) AND (dbo.Sales.Company = 1)
GROUP BY dbo.SalesReturns.Item
UNION ALL
SELECT dbo.SalesReturns.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, SUM(dbo.SalesReturns.Quantity) AS SR2, 0 AS SR3, 0 AS D
FROM dbo.SalesReturns INNER JOIN
dbo.Sales ON dbo.SalesReturns.Invoice = dbo.Sales.Invoice
WHERE (dbo.SalesReturns.[Date] BETWEEN @StartDate And @EndDate) AND (dbo.Sales.Company = 2)
GROUP BY dbo.SalesReturns.Item
UNION ALL
SELECT dbo.SalesReturns.Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, SUM(dbo.SalesReturns.Quantity) AS SR3, 0 AS D
FROM dbo.SalesReturns INNER JOIN
dbo.Sales ON dbo.SalesReturns.Invoice = dbo.Sales.Invoice
WHERE (dbo.SalesReturns.[Date] BETWEEN @StartDate And @EndDate) AND (dbo.Sales.Company = 3)
GROUP BY dbo.SalesReturns.Item
UNION ALL
SELECT Item, 0 AS O, 0 AS P1, 0 AS P2, 0 AS P3, 0 AS S1, 0 AS S2, 0 AS S3, 0 AS SR1, 0 AS SR2, 0 AS SR3, SUM(Quantity) AS D
FROM dbo.Damage
WHERE ([Date] BETWEEN @StartDate And @EndDate)
GROUP BY Item) T1 INNER JOIN
dbo.Items ON T1.Item = dbo.Items.Code INNER JOIN (SELECT Code, Name, SUM(CASE WHEN NETPPRICE <> 0 THEN NETPPRICE ELSE 0 END) AS NetPPrice,
SUM(CASE WHEN NETSPRICE <> 0 THEN NETSPRICE ELSE 0 END) AS NetSPrice, SUM(CASE WHEN Diff <> 0 THEN Diff ELSE 0 END)
AS Difference
FROM (SELECT TOP 100 PERCENT dbo.Items.Code, dbo.Items.Name, V1.NetPPrice, V2.NetSPrice, ROUND(V2.NetSPrice - V1.NetPPrice, 2) AS Diff
FROM dbo.Items LEFT OUTER JOIN
(SELECT Item, ROUND(NetPPrice, 2) AS NetPPrice
FROM (SELECT Item, AVG([Value]/Units) AS NetPPrice
FROM (SELECT dbo.PurchaseDetails.Item, SUM(dbo.PurchaseDetails.Quantity * dbo.PurchaseDetails.Price) AS Value,
SUM(dbo.PurchaseDetails.Quantity) AS Units
FROM dbo.Purchase INNER JOIN
dbo.PurchaseDetails ON dbo.Purchase.Invoice = dbo.PurchaseDetails.Invoice
GROUP BY dbo.Purchase.[Date], dbo.PurchaseDetails.Item
HAVING (dbo.Purchase.[Date] <= GETDATE()) AND SUM(dbo.PurchaseDetails.Quantity)<>0) T
GROUP BY Item) T1) V1 ON dbo.Items.Code = V1.Item LEFT OUTER JOIN
(SELECT Item, ROUND(NetSPrice, 2) AS NetSPrice
FROM (SELECT Item, AVG([Value]/Units) AS NetSPrice
FROM (SELECT dbo.SalesDetails.Item,
SUM(dbo.SalesDetails.Quantity * (dbo.SalesDetails.Price - dbo.SalesDetails.Discount)) AS Value,
SUM(dbo.SalesDetails.Quantity) AS Units
FROM dbo.Sales INNER JOIN
dbo.SalesDetails ON dbo.Sales.Invoice = dbo.SalesDetails.Invoice
GROUP BY dbo.Sales.[Date], dbo.SalesDetails.Item
HAVING (dbo.Sales.[Date] <= GETDATE())) T
GROUP BY Item) T1) V2 ON dbo.Items.Code = V2.Item) G
GROUP BY Code, Name
) T2 ON T1.Item = T2.Code
GROUP BY T1.Item, dbo.Items.Name, T2. NetPPrice
ORDER BY dbo.Items.Name
End
GO
感謝@marc_s進行了許多有趣的編輯和註釋。 – MoniXx