2014-11-04 2 views
0

아래 코드에서 함수가 batchrelease 수량을 반환하는 쿼리와 함수가 있습니다. select sqlquery에 함수가 포함되어 있습니다. "프로 시저 또는 함수 dbo.GetBatchReleaseQuantity 너무 많은 인수가 지정되었습니다. "이 문제를 극복하도록 도와주십시오.함수에 SQL 쿼리에 너무 많은 인수가 지정되어 있습니다

SELECT p.ProductID, 
    p.ProductName, 
    ISNULL((SELECT ISNULL(CurrentStock,0.00) 
    FROM Productstatus PS 
    WHERE PS.ProductID =p.ProductID 
      AND PS.LocationID = 1 
      AND PS.StatusDateTime= '2014-08-27' 
      and PS.productid=p.productid),0) OpeningStockQuantity, 
      ISNULL((SELECT ISNULL((CurrentStock*PS.UnitPrice),0.00) 
    FROM Productstatus PS 
    WHERE PS.ProductID =p.ProductID 
      AND PS.LocationID = 1 
      AND PS.StatusDateTime= '2014-08-27' 
      and PS.productid=p.productid),0) OpeningStockValue, 
      ISNULL((SELECT ISNULL(CurrentStock,0.00) 
    FROM Productstatus PS 
    WHERE PS.ProductID =p.ProductID 
      AND PS.LocationID = 1 
      AND PS.StatusDateTime= '2014-08-27' 
      and PS.productid=p.productid),0) ClosingStockQuantity, 
      ISNULL((SELECT ISNULL((CurrentStock*PS.UnitPrice),0.00) 
    FROM Productstatus PS 
    WHERE PS.ProductID =p.ProductID 
      AND PS.LocationID = 1 
      AND PS.StatusDateTime= '2014-08-27' 
      and PS.productid=p.productid),0) ClosingStockValue, 
      (SELECT dbo.GetBatchReleaseQuantity(1,2, '2014-01-27 00:00:00', '2014-11-27 23:59:59') AS BatchReleaseQuantity 
     FROM Productstatus PS 
     WHERE  
       PS.LocationID = 1 
       and PS.productid=p.productid AND PS.StatusDateTime > = '2014-01-27 00:00:00' AND PS.StatusDateTime <= '2014-10-27 23:59:59') 

    --  ISNULL((SELECT ISNULL((dbo.GetBatchReleaseQuantity(1,2, '2014-01-27 00:00:00', '2014-11-27 23:59:59')),0.00) 
    --FROM Productstatus PS 
    --WHERE PS.ProductID =p.ProductID 
    --  AND PS.LocationID = 1 
    --  AND PS.StatusDateTime= '2014-08-27' 
    --  and PS.productid=p.productid),0) Batchout 

      FROM Product P 
    --- SELECT dbo.GetBatchReleaseQuantity(@i_LocationID,P.ProductID,@i_Date,@i_Date) From Product P  




LEFT OUTER JOIN LocationProductMap LMP ON LMP.ProductID=P.ProductID 
WHERE LMP.ProductInFlow=1 

기능

ALTER FUNCTION [dbo].[GetBatchReleaseQuantity] 
() 
RETURNS int 
--WITH ENCRYPTION  
AS 
BEGIN 

DECLARE @i_LocationID VARCHAR(50) 
DECLARE @i_ProductID INT 
DECLARE @i_StartDate VARCHAR(50) 
DECLARE @i_EndDate VARCHAR(50) 


    RETURN (SElECT SUM(BatchReleaseQuantity) AS BatchReleaseQuantity From BatchReleaseDetails BRD 
    LEFT OUTER JOIN BatchRelease BR ON BR.BatchReleaseID=BRD.BatchReleaseID 
    Where [email protected]_ProductID AND [email protected]_LocationID AND BRD.CreatedOn>[email protected]_StartDate AND BRD.CreatedOn<[email protected]_EndDate) 
+0

내게는 함수의 변수 decs가 잘못된 위치에있는 것처럼 보입니다. – Fred

답변

4

함수 매개 변수가없는, 당신은 예를 들어, ()에 넣어해야합니다 그래서

CREATE FUNCTION Add 
(
    @P1 INT, 
    @P2 INT 
) 
RETURNS INT 
AS 
BEGIN 
    RETUTN @P1 + @P2 
END 

을 이런 일에 당신을 변경 변수를 매개 변수로 이동하여 대신 :

ALTER FUNCTION [dbo].[GetBatchReleaseQuantity] 
(
    @i_LocationID VARCHAR(50), 
    @i_ProductID INT, 
    @i_StartDate VARCHAR(50), 
    @i_EndDate VARCHAR(50) 
) 
RETURNS int 
--WITH ENCRYPTION  
AS 
BEGIN 
    RETURN (SELECT SUM(BatchReleaseQuantity) AS BatchReleaseQuantity From BatchReleaseDetails BRD 
    LEFT OUTER JOIN BatchRelease BR ON BR.BatchReleaseID=BRD.BatchReleaseID 
    Where [email protected]_ProductID AND [email protected]_LocationID AND BRD.CreatedOn>[email protected]_StartDate AND BRD.CreatedOn<[email protected]_EndDate) 
END 

또한 INT을 첫 번째 매개 변수로 전달하는 것처럼 보이지만이 함수는 VARCHAR(50)으로 선언 된대로 호출하는 방법을 고려해야합니다. 따라서 @i_LocationID 매개 변수는 INT이어야합니다.

+0

위 쿼리를 실행할 때 하위 쿼리에서 두 개 이상의 값을 반환합니다. – Developer

+0

저장 프로 시저에 문제가있어 다른 문제가 있습니다. 쿼리를 하나씩 작업하고 결합하는 부분으로 분해합니다. – DavidG

관련 문제