2012-03-05 126 views
0
USE db_preprac_v1_2 
GO 

CREATE PROCEDURE sp_accessory 
@repID AS SMALLINT 
AS 

- 创建表获得当运行存储过程

SELECT * 
    INTO #tempAcc 
    FROM accessory 
    GO 

- 增加的临时副本印刷

ALTER TABLE #tempAcc 
    ADD 
    Printed SMALLINT 
    GO 

一个名为列“必须声明标量变量”的错误 - 设置该列中的所有值等于0

UPDATE #tempAcc 
    SET Printed = 0 
    GO 


    --Declare variables 

    DECLARE @RepName AS VARCHAR(30) 
    DECLARE @RepTel AS VARCHAR(10) 
    DECLARE @AccID AS SMALLINT 
    DECLARE @AccDesc AS VARCHAR(30) 
    DECLARE @AccPrice AS MONEY 
    DECLARE @Quantity AS SMALLINT 
    DECLARE @total AS MONEY = 0 
    --DECLARE @ID AS SMALLINT = @repID 

/* 检查代表编号是否有效,如果有效,则显示代理销售的所有配件 。如果无效,它将打印一条错误消息。 */

IF NOT EXISTS(SELECT rep_id FROM representative WHERE rep_id = @repID) 
>BEGIN 
    PRINT 'Invalid representative id' 
END 
ELSE 
BEGIN 
    SELECT @RepName = representative.rep_name, @RepTel = representative.rep_tel 
    FROM representative 
    WHERE @repID = representative.rep_id 

    PRINT '************************' 
    PRINT 'Accessory Details Report' 
    PRINT '************************' 
    PRINT '' 
    PRINT 'Representative Information' 
    PRINT '' 
    PRINT 'Reps Name: ' + @RepName 
    PRINT 'Reps Telephone: ' + @RepTel 
    PRINT '' 

    PRINT 'Accessories Sold by this Representative' 

--Creates while循环通过行迭代

WHILE EXISTS (SELECT * 
    FROM #tempAcc 
    WHERE Printed = 0) 

    BEGIN 
    SELECT @AccID = MIN (acc_id) 
    FROM #tempAcc 
    WHERE Printed = 0 

    SELECT @AccDesc = accessory.acc_desc, @AccPrice = accessory.acc_price, @Quantity = accessory_detail.quantity 
    FROM accessory 
    JOIN accessory_detail 
    ON accessory.acc_id = accessory_detail.acc 
    JOIN representative 
    ON accessory_detail.rep = representative.rep_id 
    WHERE @repID = representative.rep_id 

    PRINT 'Accessory Desc: ' + @AccDesc 
    PRINT 'Accessory Price: ' + CAST(@AccPrice AS VARCHAR) 
    PRINT 'Quantity in Car: ' + CAST(@Quantity AS VARCHAR) 
    PRINT '' 

    UPDATE #tempAcc 
     SET Printed = 1 
     WHERE @AccID = acc_id 

--Calculates饰品的合计值出售

SELECT @total = @total + @AccPrice 
    END 
END 

    PRINT 'The total value of the accessories sold is: ' + CAST(@total AS VARCHAR) 
    PRINT 'Transaction Date: ' + CAST(GETDATE() AS VARCHAR)  

GO 

--to执行该过程,提供代表性的id的输入值。

EXEC sp_accessory 3 
GO 

DROP PROCEDURE sp_accessory 
GO 

这是我所得到的,当我执行使用Microsoft SQL Server Management Studio中的代码:

Msg 137, Level 15, State 2, Line 15 
Must declare the scalar variable "@repID". 
Msg 156, Level 15, State 1, Line 19 
Incorrect syntax near the keyword 'ELSE'. 
Msg 137, Level 15, State 2, Line 23 
Must declare the scalar variable "@repID". 
Msg 137, Level 15, State 2, Line 53 
Must declare the scalar variable "@repID". 

--------------------------------------------------------------------------** 
+0

固定我下面指出的错误后,现在我得到它成功地打印出我所期待的。你还有问题吗? – 2012-04-25 21:41:18

回答

2

1)没有指定任何过程 “以sp_(任何)”;应将“sp_”用于系统存储过程。

2)您的程序中间有三条GO声明。如果您将其作为CREATE脚本运行,则会假定第一个GO表示脚本结束。

3)你的BEGIN之前有一个流浪>你的IF之后。

4)为什么你在执行它后丢掉了程序?

5)您不会将数量乘以价格以获取每行小计。总数因此不正确。更改此:

SELECT @total = @total + @AccPrice

这样:

SELECT @total = @total + (@Quantity * @AccPrice)

+0

SELECT *,0 as Printed INTO #tempAcc FROM accessory这也将缩短过程。 – HLGEM 2012-03-05 21:28:03

+0

@Adam V非常感谢,我再也没有错误,所有这一切都要归功于你。我正在放弃这个过程,因为执行时我一直看到它已经存在的消息 – 2012-03-07 09:27:21

+0

@Adam,代码运行良好,但它不打印所需的结果。 – 2012-03-07 10:43:05