我的存储过程不返回行,但我的视图确实如此

时间:2011-11-15 23:54:18

标签: sql-server

我设计了以下视图并尝试将其用作存储过程;但是,我的存储过程不会返回与我的视图相同的行。

我的视图返回46行:

SELECT   
   NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY, 
   SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070], 
   SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071], 
   SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700], 
   SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701], 
   SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702], 
   SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703], 
   SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
   SUM(Cost_Center_Dollars) AS Total, Program_Type
FROM  dbo.VDP_Master_Drug_Receipts_Log 
WHERE Date_Entered BETWEEN '10/1/2011' AND '11/1/2011'
   AND (Program_Type = 'VDP-BULK')
GROUP BY NDC_Text, Trade_Name, Vendor_Code, Program_Type
ORDER BY Trade_Name

Results

我的存储过程

GO ALTER PROCEDURE [dbo].[ShowProductByCategory](@StartDate DateTime, @EndDate DateTime, @Type Varchar(15))
AS
Return 
SELECT NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY, 
   SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070], 
   SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071], 
   SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700], 
   SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701], 
   SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702], 
   SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703], 
   SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
   SUM(Cost_Center_Dollars) AS Total, Program_Type
FROM dbo.VDP_Master_Drug_Receipts_Log 
WHERE Date_Entered BETWEEN @StartDate AND @StartDate
   AND (Program_Type = 'Type')
GROUP BY NDC_Text, Trade_Name, Vendor_Code, Program_Type
ORDER BY Trade_Name

3 个答案:

答案 0 :(得分:1)

您的存储过程的WHERE子句有

WHERE Date_Entered BETWEEN @StartDate AND @StartDate

应该是@EndDate

还有一个不同的Progam_Type,会导致不同的结果。

答案 1 :(得分:1)

您的存储过程选择数据集 - 因此您不需要(且必须没有)RETURN条款!

试试这个:

ALTER PROCEDURE [dbo].[ShowProductByCategory]
    (@StartDate DateTime, @EndDate DateTime, @Type Varchar(15))
AS
  -- Return    NO RETURN HERE !!
    SELECT 
       NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY, 
       SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070], 
       SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071], 
       SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700], 
       SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701], 
       SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702], 
       SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703], 
       SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
       SUM(Cost_Center_Dollars) AS Total, Program_Type
    FROM dbo.VDP_Master_Drug_Receipts_Log 
    WHERE Date_Entered BETWEEN @StartDate AND @EndDate
    AND (Program_Type = 'Type')
    GROUP BY 
        NDC_Text, Trade_Name, Vendor_Code, Program_Type
    ORDER BY 
        Trade_Name

答案 2 :(得分:0)

问题出在WHERE子句

WHERE Date_Entered BETWEEN @StartDate AND @StartDate
   AND (Program_Type = 'Type')

我认为一定是

WHERE Date_Entered BETWEEN @StartDate AND @EndDate
   AND (Program_Type = @Type)