Я использую SQL Server 2014. У меня есть SQL-запрос под названием «Withdraw», который возвращает значение 0 или -1, в зависимости от успеха его работы.Как выполнить SQL-запрос из SQL-запроса
Что я хочу сделать, это создать второй запрос, который будет выполнять первый, и поместить возвращаемое значение в переменную, чтобы я мог использовать его в выражении IF в новом запросе.
Простым способом сделать это будет копирование кода другого запроса, который может быть выполнен (это не так долго для запроса), но мне было интересно, есть ли более элегантный способ сделать это с помощью выполняя запрос, а не копируя его.
Спасибо, ребята!
Вывод запроса:
PROC [dbo].[withdrawl]
(@AccountNum AS INT,
@Amount AS INT)
AS
BEGIN
set nocount on
declare @rc as integer
begin transaction
begin try
IF @Amount < 20000
BEGIN
IF @Amount < ((SELECT crntbalance FROM tblAccounts WHERE acctNum = @AccountNum) + (SELECT overdraftsz FROM tblAccounts WHERE acctNum = @AccountNum))
BEGIN
UPDATE tblAccounts
SET crntbalance -= @Amount
WHERE acctNum = @AccountNum
INSERT INTO tblTransactions (actNum, trnTypCod, amount)
VALUES (@AccountNum, 1, @Amount)
UPDATE tblAccounts
SET crntbalance += -5
WHERE acctNum = @AccountNum
INSERT INTO tblTransactions (actNum, trnTypCod, amount)
VALUES (@AccountNum, 5, 5)
SET @rc = 0
END
ELSE
BEGIN
PRINT 'You do not have sufficient funds in your account to make this withdrawl.'
SET @rc = -1
END
END
ELSE
BEGIN
IF @Amount < ((SELECT crntbalance FROM tblAccounts WHERE acctNum = @AccountNum) + (SELECT overdraftsz FROM tblAccounts WHERE acctNum = @AccountNum))
BEGIN
UPDATE tblAccounts
SET crntbalance -= @Amount
WHERE acctNum = @AccountNum
INSERT INTO tblTransactions (actNum, trnTypCod, amount)
VALUES (@AccountNum, 1, @Amount)
SET @rc = 0
END
ELSE
BEGIN
PRINT 'You do not have sufficient funds in your account to make this withdrawl.'
SET @rc = -1
END
END
commit transaction
END TRY
BEGIN CATCH
rollback transaction
SET @rc = -1
END CATCH
BEGIN
SELECT
crntbalance AS 'New Balance'
FROM
tblAccounts
WHERE
acctNum = @AccountNum
END
return @rc
END
Новый запрос:
CREATE PROCEDURE Transfer
(@TakeAccount AS INT, @GiveAccount as INT, @amount as INT)
AS
BEGIN
declare @rc as integer
BEGIN TRY
set @rc = EXECUTE dbo.withdrawl
IF @rc = -1
BEGIN
END
ELSE
BEGIN
END
END TRY
BEGIN CATCH
END CATCH
END
Если удалось опубликовать некоторый код, который мы можем помочь. В противном случае мы просто догадываемся. –
Добавлено в исходное сообщение :) Спасибо :) –
Я не понимаю, в чем проблема. Что случилось с вашим текущим кодом? –