USE db_preprac_v1_2
GO
CREATE PROCEDURE sp_accessory
@repID AS SMALLINT
AS
- Создать временную копию таблицы
SELECT *
INTO #tempAcc
FROM accessory
GO
- добавить столбец с именем Printed
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'
- Создает цикл 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
- Расчет общей стоимости проданных аксессуаров
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
- для выполнения процедуры введите входное значение представительского идентификатора.
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".
--------------------------------------------------------------------------**