у вас есть несколько вариантов, как это сделать, какой из них подходит вам лучше всего, только вы можете знать
Обратите внимание, что все решения предполагают, что AccountID
является первичным ключом таблицы COA
, если это не так, вам придется внести корректировки
Без сомнения, будет больше вариантов, я только что упомянул несколько, которые приходят на ум.
первая опция: изменить запрос, чтобы он вычислял правильное значение для столбца Type
, и, таким образом, сохранение значения в базе данных больше не требуется
SELECT TOP 1000
[AccountID] ,
[Account_Title] ,
[opening_balance] ,
[Account_group] ,
[Group_subHead] ,
[Accounts_categories] ,
case when [opening_balance] < 0 then 'CR' else 'DR' end as Type
FROM [dbo_main].[dbo].[COA]
второй параметр: Измените схему таблицы, чтобы столбец Type
был вычисляемым столбцом
alter table [dbo_main].[dbo].[COA] drop column type
alter table [dbo_main].[dbo].[COA]
add Type as case when [opening_balance] < 0 then 'CR' else 'DR' end
третий вариант: написать триггер, который сохраняет значение в столбце Type
правильно
create trigger tr_UI_dbo_main on [dbo_main].[dbo].[COA]
for update, insert
as
begin
set nocount on
update [dbo_main].[dbo].[COA]
set type = 'CR'
where AccountID in (select AccountID from inserted)
and Opening_balance < 0
update [dbo_main].[dbo].[COA]
set type = 'DR'
where AccountID in (select AccountID from inserted)
and Opening_balance >= 0
end
четвертый вариант: Написать код в вашем клиенте VB, который изменяет текст в сетке данных
К сожалению, я не знаю VB, поэтому вам придется посмотреть, как это сделать самостоятельно
пятый вариант: написать представление и использовать это представление вместо непосредственного запроса к таблице. Это также означает, что больше нет смысла хранить значение Type в вашей таблице, как и первый параметр
create view vw_COA as
SELECT [AccountID] ,
[Account_Title] ,
[opening_balance] ,
[Account_group] ,
[Group_subHead] ,
[Accounts_categories] ,
case when [opening_balance] < 0 then 'CR' else 'DR' end as Type
FROM [dbo_main].[dbo].[COA]
и используйте вид в вашем клиенте вот так
SELECT top 1000
[AccountID] ,
[Account_Title] ,
[opening_balance] ,
[Account_group] ,
[Group_subHead] ,
[Accounts_categories] ,
Type
FROM [dbo_main].[dbo].vw_COA