169 похожих чатов

Добрый день. Не подскажете в чём проблема? Msg 3902, Level 16,

State 1, Procedure dbo.ExecuteOperation, Line 60 [Batch Start Line 2]
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
USE [SeaphonServer]
GO
/****** Object: StoredProcedure [dbo].[ExecuteOperation] Script Date: 5/22/2022 12:57:29 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ExecuteOperation]
@AccountTo nvarchar(17) = NULL,
@AccountFrom nvarchar(17) = NULL,
@OperationType int = NULL,
@Cash money = NULL,
@ActionID int = NULL
AS
DECLARE @AccountFromID int
DECLARE @AccountToID int
DECLARE @FromCash Money
DECLARE @ToCash Money
DECLARE @FF NVARCHAR

BEGIN TRANSACTION

SET @AccountFromID = (SELECT dbo.Accounts.ID
FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountFrom)

SET @AccountToID = (SELECT dbo.Accounts.ID
FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountTo)

SET @FromCash = (SELECT dbo.Accounts.Cash
FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountFrom)

SET @ToCash = (SELECT dbo.Accounts.Cash
FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountTo)

SET @FF = (SELECT FullName
FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.ID)

IF (@FF IS NOT NULL)
BEGIN
IF (@AccountTo is NOT NULL AND @AccountFrom is NOT NULL) AND (@FromCash >= @ToCash)
BEGIN
UPDATE Accounts SET Cash = @FromCash - @ToCash WHERE ID = @AccountFromID;
UPDATE Accounts SET Cash = @ToCash + @FromCash WHERE ID = @AccountToID;
END
ELSE
BEGIN
ROLLBACK
END
END
ELSE
BEGIN
IF (@ActionID = 1) AND (@FromCash >= @Cash) AND (@ToCash >= @Cash)
BEGIN
UPDATE Accounts SET Cash = @FromCash - @Cash WHERE ID = @AccountFromID;
UPDATE Accounts SET Cash = @ToCash - @Cash WHERE ID = @AccountToID;
END
ELSE
BEGIN
ROLLBACK
END
IF (@ActionID = 2)
BEGIN
UPDATE Accounts SET Cash = @FromCash + @Cash WHERE ID = @AccountFromID;
UPDATE Accounts SET Cash = @FromCash + @Cash WHERE ID = @AccountToID;
END
END
COMMIT TRANSACTION

INSERT INTO Operations(AccountFrom, AccountTo, OperationType, OperationDate, OperationTime, Cash)
VALUES (@AccountFromID, @AccountToID, @OperationType, CONVERT(date, CURRENT_TIMESTAMP), CONVERT(time, CURRENT_TIMESTAMP), @Cash)

3 ответов

11 просмотров

вот это SET @AccountFromID = (SELECT dbo.Accounts.ID FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountFrom) SET @AccountToID = (SELECT dbo.Accounts.ID FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountTo) SET @FromCash = (SELECT dbo.Accounts.Cash FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountFrom) SET @ToCash = (SELECT dbo.Accounts.Cash FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.AccountTo) SET @FF = (SELECT FullName FROM dbo.Accounts INNER JOIN dbo.Operations ON dbo.Accounts.AccountID = dbo.Operations.ID) очень плохо, записей может быть более одной

Владимир
вот это SET @AccountFromID = (SELECT dbo.Accounts...

И.. Вот ещё. А как можно упростить такое количество подзапросов?

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Приветики всем!)) Подскажите: есть функция, которая записывает число типа Cardinal в четыре байта, хранимые в TBytes. Можете помочь мне, показав, как должна выглядеть функци...
Моринаро
5
Карта сайта