Настройка
Я пытаюсь написать действительно простую систему учета двойной записи для малого бизнеса.Это больше для моего личного обучения, чем для чего-либо еще.
У меня есть два стола: Transactions
и DebitCredits
:
[dbo].[Transactions](
[TransactionId] [int] IDENTITY(1,1) NOT NULL,
[TransactionDate] [date] NOT NULL,
[IdFrom] [int] NOT NULL,
[IdTo] [int] NOT NULL,
[Amount] [decimal](18, 2) NOT NULL,
[IdCostCentre] [int] NOT NULL,
[IdCurrency] [int] NOT NULL)
... где IdFrom
и IdTo
являются FK для таблицы Accounts
, которая содержит данные для каждой учетной записи.From и To относятся к направлению, в котором идут деньги. То есть их берут из From и дают To.
[dbo].[DebitCredits](
[DebitCreditId] [int] IDENTITY(1,1) NOT NULL,
[TransactionDate] [date] NOT NULL,
[IdAccount] [int] NOT NULL,
[Amount] [money] NOT NULL,
[DorC] [char](1) NOT NULL)
Что я хочу:
Когда строка вставляется в Transactions
(с веб-сайта MVC 3), я хочу, чтобы триггер вставлял две строки в DebitCredits
:
Строка транзакций:
1, 01/01/2012, 33, 44, 300, 2, 1
...where 1
- это TransactionId
, дата - это дата, 33
- это From Account id
, а To - To Account Id
.300
- это сумма, 2
- это FK для таблицы CostCentres, 1
- это валюта (например, аргентинские песо).
Строки DebitCredits:
3, 01/01/2012, 33, -300, "D"
4, 01/01/2012, 44, 300, "C"
Проблема:
Я не знаю, как выразить в T-SQL те два оператора вставки, которые мне нужны.Я могу вставить значения, полученные из строки Transactions
, но не могу:
- изменить знак суммы (300)
- Я не знаю, какустановить значение для столбца DorC (дебет или кредит), т. е. «D» или «C», в зависимости от столбцов
IdFrom
и IdTo
в таблице Transactions
.
Где я попал:
ALTER TRIGGER [dbo].[tgInsertDebitCreditRows] ON [dbo].[Transactions]
FOR INSERT
AS
INSERT INTO DebitCredits
(IdTransaction, TransactionDate, IdAccount, Amount, DorC)
SELECT
TransactionId, TransactionDate, IdFrom, Amount, "C"
FROM inserted
INSERT INTO DebitCredits
(IdTransaction, TransactionDate, IdAccount, Amount, DorC)
SELECT
TransactionId, TransactionDate, IdTo, Amount, "C"
FROM inserted
Очевидно, что это не удается, поскольку SQL Server не «знает» столбцы «C» и «D».И это не столбцы, это просто значения (выражения желаний), которые я хочу вставить.
А также суммы будут 300 в обоих случаях вместо -300 и 300.
Есть указатели?(Само собой разумеется, что я никогда не писал триггер в своей жизни ... на самом деле больше веб-разработчика).