我需要关于存储过程的帮助当涉及到数据库时,我是一个完整而彻底的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