2012-03-05 67 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