2014-04-17 137 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