2014-03-07 2 views
0

월, 연도 및 보고서 소스에 대한 매개 변수를 설정할 때 영향을 미치지 않습니다. 나는 여전히 프로 시저를 실행할 때 모든 판매를 얻고 있습니다. 아무도 틀린 것을 볼 수 있습니까?저장 프로 시저에서 작동하지 않는 매개 변수

ALTER PROCEDURE [dbo].[ddsDiscount] 
    @month INT, 
    @year INT, 
    @report_source nvarchar 
AS 
    SELECT 
     isa.identifiers       AS ISBN, 
     isa.sales_date       AS DATO, 
     isa.quantity        AS ANTALL, 
     bk.title         AS Tittel, 
     BV.name         AS BUTIKK, 
     BB.name         AS Forlag, 
     COALESCE(id.sales_price, isa.sales_price) AS SalesPrice 
    FROM 
     book_sales AS isa 
    LEFT JOIN 
     discount AS id ON isa.identifiers = id.identifiers 
        AND isa.sales_date BETWEEN id.from_date AND id.to_date 
        AND Month(isa.sales_date) = @month 
        AND Year(isa.sales_date) = @year 
    LEFT OUTER JOIN 
     books AS BK ON BK.book_id = isa.book_id 
    LEFT OUTER JOIN 
     store AS BV ON bv.store_id = isa.store_id 
    LEFT OUTER JOIN 
     publisher AS BB ON bb.publisher_id = bk.publisher_id 
    LEFT OUTER JOIN 
     book_contributor AS BC ON BC.book_id = isa.book_id 
         AND isa.report_source = @report_source 
+0

첫 번째로 ** 어떤 ** 데이터베이스 **를 사용하고 있습니까? SQL은 단지 쿼리 언어 일뿐입니다 ** 어느 데이터베이스가 SQL을 사용하고 있는지 당신이 프로그래밍하고 있는지 분명하지 않습니다. 둘째 :'nvarchar' ** ** 길이가 없으면 ** 정확히 1 문자 ** 길이의 매개 변수를 (SQL Server에서) 제공합니다 - 의도는 무엇입니까 ?? ** 항상 ** 길이를 지정하는 것이 좋습니다! 'nvarchar() 대신'nvarchar (20)'(또는 무엇이든간에)을 사용하십시오. –

+0

Microsoft SQL Server 2008 R2. Ahv는 nvarchar (255)로되어 있습니다. 아직 작동하지 않습니다. – Lebowski

+0

내 대답보기 - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? –

답변

1

당신은 잘못된 장소의 조건에 대한 검사를 옮기고 :

여기
FROM 
     book_sales AS isa 
    LEFT JOIN 
     discount AS id ON isa.identifiers = id.identifiers 
        AND isa.sales_date BETWEEN id.from_date AND id.to_date 
        AND Month(isa.sales_date) = @month 
        AND Year(isa.sales_date) = @year 

(@YEAR@MONTH에 의해 정의 된) 이러한 조건이이 경우 평가입니다 할인 - 해당 사항이없는 경우 해당 조건은 이 아니며이 적용됩니다.

또한 : 이러한 조건은 정말하여 discount 테이블에 가입 함께 할 아무것도하지 않습니다 - 그들은 단지 기본 Book_sales 표를 참조 . 당신은 가입 조건에서 사람들을 제거하고 대신 일반 WHERE 절에 넣어해야합니다

SELECT 
     isa.identifiers       AS ISBN, 
     isa.sales_date       AS DATO, 
     isa.quantity        AS ANTALL, 
     bk.title         AS Tittel, 
     BV.name         AS BUTIKK, 
     BB.name         AS Forlag, 
     COALESCE(id.sales_price, isa.sales_price) AS SalesPrice 
    FROM 
     book_sales AS isa 
    LEFT JOIN 
     discount AS id ON isa.identifiers = id.identifiers 
        AND isa.sales_date BETWEEN id.from_date AND id.to_date 
    LEFT OUTER JOIN 
     books AS BK ON BK.book_id = isa.book_id 
    LEFT OUTER JOIN 
     store AS BV ON bv.store_id = isa.store_id 
    LEFT OUTER JOIN 
     publisher AS BB ON bb.publisher_id = bk.publisher_id 
    LEFT OUTER JOIN 
     book_contributor AS BC ON BC.book_id = isa.book_id 
         AND isa.report_source = @report_source 
    WHERE 
     Month(isa.sales_date) = @month 
     AND Year(isa.sales_date) = @year 
+0

고마워요! – Lebowski

+0

@Lebowski :이 답변으로 문제를 해결하는 데 도움이 되었다면 [**이 대답 수락 **] (http://meta.stackexchange.com/q/5234/153998)를 참조하십시오. 이것은 * 당신을 돕기 위해 자신의 시간을 보낸 * 사람들에게 감사를 표합니다. –

+0

미안하지만, 어떻게 해야할지 모르겠다. .... – Lebowski

1

귀하의 매개 변수 만 할인 테이블에서 선택에 영향을 미친다. where 절로 매개 변수를 이동하십시오.

관련 문제