Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Kleo, Вы писали:
K>>Не получается, надо исправить ошибку.
W>И какая ошибка? Или мы еще и найти ошибку должны вместо тебя?
K>>Alter PROCEDURE TransferAmount(@N1 int,
W>А это ты сам(а) написал(а)? Объяснить сможешь? W>Я вот не понимаю, что это за арифметические операции с номерами счетов.
Написала сама. Чего объяснять? Так всё понятно.
В базе данных есть таблица со счетами (назовем её для простоты T).
В таблице T есть среди прочих поля:
N — Номер счета
S — сумма на счете
Требуется:
Написать хранимую процедуру на языке TSQL, которая:
1. Принимает в качестве аргументов параметры:
@N1 — номер первого счета
@N2 — номер второго счета
@S — сумма денежных средств
2. Переводит сумму @S с первого на второй счет, при это проверяя, достаточно ли средств на первом счете
3. Использует транзакцию при переводе с первого на второй счет .
Не получается, надо исправить ошибку.
Alter PROCEDURE TransferAmount(@N1 int,
@N2 int,
@S int
)
AS
BEGIN TRANSACTION
IF( @N1>=@S)
BEGIN
SET @N1=@N1-@S;
SET @N2=@N2+@S;
END;
COMMIT;
Здравствуйте, Kleo, Вы писали:
K>В таблице T есть среди прочих поля: K>N — Номер счета K>S — сумма на счете
Это учебная задача? Просто в реальных базах данных так никто не хранит...
Твое описание параметров процедуры: K>1. Принимает в качестве аргументов параметры: K> @N1 — номер первого счета K> @N2 — номер второго счета K> @S — сумма денежных средств
Судя по этому: K>IF( @N1>=@S)
в @N1 и @N2 процедура получает не номер счета, а текущий остаток на счете.
Если @N1 и @N2 — это все-таки номера счетов (кстати, почему номера счетов имеют тип INT?), то тебе сначала надо по этим номам получить текущие остатки, и только потом выполнять арифметические операции с ними.
И еще, где тут сохранение новых вычисленных остатков а таблице?
Красота — наивысшая степень целесообразности. (c) И. Ефремов