2017-04-12 52 views
1

我有一个银行分值为两个表accountmastertransactionmaster查找大于指定交易金额的帐户

Accountmaster有列:

accid(pk) 
accname 
bal 
branch 

Transactionmaster列:

Tnumber(pk) 
dot 
txnAmt 
transactiontype 
accid(fk) 
branch(fk) 

我想找到低于不使用的INSTEAD OF触发器。

  1. 每当事务是由账户持有由(事务类型的沉积物,撤回)它应该反映在accountmaster表的平衡。

  2. 无论何时账户持有人进行> 50000(提取或存款)交易,交易详情将被插入到新表'hightransaction'中,并删除transactionmaster表中的特定交易。

我试过类似的东西,但在结果中只显示列名,没有值。

首先我复制transactionmaster成newtable的hightransaction

select * 
into hightransaction 
from transactionmaster 
where 1 = 2 

然后我创建了一个触发器

create trigger [dbo].[transaction2] 
on transactionmaster 
for insert 
as 
    declare @transtype nvarchar(10); 

    select @transtype = [TXNTYPE] 
    from inserted 

    if (select txnamt from inserted) > 75000 
    begin 
     insert into [dbo].[hightransactionmaster3] 
      select 
       dot, txntype, chqnum, chqdate, txnamt, 
       acid, brid, userid 
      from 
       inserted 
    end 
    else 
    begin 
     insert into [dbo].[TRANSACTIONMASTER] 
      select 
       dot, txntype, chqnum, chqdate, txnamt, 
       acid, brid, userid 
      from 
       inserted 
    end 

,我试图执行

select * from hightransaction 

的输出是仅列名和没有价值。

+0

我不认为你需要在数据库中的任何地方存储天平,在'Transactionmaster'上创建一个'View',它可以在查询时动态地计算余额。对于你的第二个要求,你需要一个存储过程。如果你确实需要存储余额,那么一个存储过程应该能够为你做所有事情。 –

+0

我不知道第二个可能没有触发器,除非你的意思是修改你现在插入的任何程序。 – ZLK

回答

0

我正在考虑像这样的存储过程。

CREATE PROCEDURE [dbo].[transaction] 
@transactionAmt int 
/* 
ADD OTHER PARAMETERS HERE 
*/ 
AS 
BEGIN 
SET NOCOUNT ON; 

IF (@transactionAmt > 50000) 
    BEGIN 
    /*INSERT STATEMENT FOR HIGHTRANSCTION TABLE*/ 
    END 
ELSE 
    BEGIN 
    /*INSERT STATEMENT FOR TRANSACTIONMASTER TABLE*/ 
    END 
END 
GO 

这提供了您可以控制应用程序并可以将参数传递到存储过程。

+0

Thq :)我现在想用触发器(而不是) – Telgo

相关问题