2014-04-17 154 views
-2

我正在嘗試創建一個存儲過程,該過程將打印客戶和他們購買的品牌列表。由程序生成的報告必須使用以下格式:ELSE附近語法錯誤

Customer Last Name1 

BrandName1

BrandName2 ...

客戶最後名稱2

品牌

客戶最後NAME3

品牌

客戶和品牌表按發票,行和產品表分開。我使用連接將它們連接在一起,但是在使用IF和ELSE時,我的代碼中出現語法錯誤,我無法弄清楚它爲什麼會出錯。

 CREATE PROCEDURE CustomerList 

    (@Cust_LName VARCHAR(20), @Brand_ID INT = NULL) 
    AS 
    BEGIN 

    IF(@Cust_LName IS NULL) 
    DECLARE Customer_Cursor CURSOR FOR 
     SELECT DISTINCT C.Cust_LName, B.Brand_Name 
     FROM LGCustomer C 
     LEFT JOIN LGInvoice I ON C.Cust_Code = I.Cust_Code 
     INNER JOIN LGLine L ON I.Inv_Num = L.Inv_Num 
     INNER JOIN LGProduct P ON L.Prod_SKU = P.Prod_SKU 
     INNER JOIN LGBrand B ON P.Brand_ID = B.Brand_ID 
     ORDER BY C.Cust_LName ASC 
     OPEN Customer_Cursor 
     FETCH NEXT FROM Customer_Cursor INTO @Cust_LName 
     WHILE (@@FETCH_STATUS = 0) 
    BEGIN 
    DECLARE Brand_Cursor CURSOR FOR 
     SELECT Brand_ID 
     FROM LGProduct 
     WHERE Brand_ID = @Brand_ID 
     OPEN Brand_Cursor 
     FETCH NEXT FROM Brand_Cursor INTO @Brand_ID 
     WHILE (@@FETCH_STATUS = 0) 
    BEGIN 
     PRINT @Brand_ID 
     FETCH NEXT FROM Brand_Cursor INTO @Brand_ID 
    END 
    CLOSE Brand_Cursor 
    DEALLOCATE Brand_Cursor 
    FETCH NEXT FROM Customer_Cursor INTO @Cust_LName 
    END 
    CLOSE Customer_Cursor 
    DEALLOCATE Customer_Cursor 

    SELECT * 
    FROM LGCustomer 

    ELSE 
    BEGIN 
    SELECT * 
    FROM LGProduct 
    WHERE Brand_ID = @Brand_ID 
    END 
    END 
    GO 

我已經試過了端氏的東西之前移除,以及移除IF和ELSE自己,但如果我這樣做,它不會顯示我多麼希望他們能夠顯示的結果。我在SQL方面比較新,所以我不確定我錯在哪裏。

在此先感謝您的幫助!

+0

它看起來像你缺少的開始和結束你的第一個if語句 – paqogomez

+0

我以前從來沒有說這個,但是有這麼多錯這個,你無法關閉幫助。這不是一個語法錯誤,你不知道這種語言發生了什麼。你需要一些有SQL經驗的人花一些時間(4小時)。 – JBrooks

+0

儘管我非常感謝你的建設性意見,但我已將其修正併產生了我想要的結果。非常感謝所有幫助過我的人。 –

回答

0

嘗試像這樣,通過塊來分配代碼,你應該能夠弄清楚。

IF(@Cust_LName IS NULL) 
BEGIN 

... 
... 

END 
SELECT * FROM LGCustomer 
END 
ELSE 
BEGIN 
SELECT * FROM LGProduct WHERE Brand_ID = @Brand_ID 
END 
END 
GO