首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

触发器的有关问题 大家看看帮解决下

2012-02-16 
触发器的问题大家看看帮解决下啊我是做 HIS的 工具是 DELPHI7 + SQLSERVER2000我在药品入库表里写的触发器

触发器的问题 大家看看帮解决下啊
我是做 HIS的 工具是 DELPHI7 + SQLSERVER2000 

我在药品入库表里写的触发器 目的是 在有新药品写到入库表里时自动调整相应药品的库存数量 没保存前的数据我存在一个临时表里 用户点保存按钮后 我再一次性插入到入库表里 可是 测试时发现 如果临时表里只有一条记录 那没什么问题 可如果临时表里要是超过一条记录 那数据库只对最后一条临时记录进行触发。请大家帮忙看看 我是不是哪里写的有问题啊。。 


结构如下:
库存表: DEOPT_XY_YK(NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE, PROVIDER);
入库表:KF_ENTERDEPOT(BILL, NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE, PROVIDER, REGISTER);
临时表:TEMP_KF(BILL, NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE);

入库表的触发器:
CREATE TRIGGER ENTERDEPOT ON dbo.KF_EnterDepot 
FOR INSERT
AS
  DECLARE @NUMBER CHAR(7)
  DECLARE @PRONO VARCHAR(20)
  DECLARE @NUM INT
  DECLARE @PRICE MONEY
  DECLARE @SALES MONEY
  DECLARE @PRODATE CHAR(10)
  DECLARE @USEDATE CHAR(10)
  DECLARE @PROVIDER VARCHAR(30)
/*****************************************************************************************************************************************************************************/
  SELECT @NUMBER = NUMBER, @PRONO = PRONO, @NUM = NUM, @PRICE = PRICE, @SALES = SALES, @PRODATE = PRODATE, @USEDATE = USEDATE, @PROVIDER = PROVIDER FROM INSERTED
/*****************************************************************************************************************************************************************************/
  SELECT * FROM DEPOT_XY_YK WHERE NUMBER = @NUMBER AND PRONO = @PRONO AND PRICE = @PRICE AND SALES = @SALES
  IF @@ROWCOUNT = 0 
  INSERT INTO DEPOT_XY_YK(NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE, PROVIDER) VALUES (@NUMBER, @PRONO, @NUM, @PRICE, @SALES, @PRODATE, @USEDATE, @PROVIDER)
  ELSE
  UPDATE DEPOT_XY_YK SET NUM = NUM + @NUM WHERE NUMBER = @NUMBER AND PRONO = @PRONO AND PRICE = @PRICE AND SALES = @SALES
/*****************************************************************************************************************************************************************************/

存储过程:
CREATE PROCEDURE P_KF_SUBMIT_ENTERDEPOT 
@BILL CHAR(15),
@PROVIDER VARCHAR(30),
@REGISTER VARCHAR(10)
AS
/*#################################################################################################*/
BEGIN TRANSACTION MY_ENTERDEPOTSUBMIT
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

INSERT INTO KF_ENTERDEPOT(BILL, NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE, PROVIDER, REGISTER)
  SELECT @BILL, NUMBER, PRONO, NUM, PRICE, SALES, PRODATE, USEDATE, @PROVIDER, @REGISTER  
  FROM TEMP_KF  
  WHERE BILL = @BILL

DELETE TEMP_KF WHERE BILL = @BILL

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
IF @@ERROR = 0 COMMIT TRANSACTION MY_ENTERDEPOTSUBMIT ELSE ROLLBACK TRANSACTION MY_ENTERDEPOTSUBMIT
GO


[解决办法]
用游标循环读出来处理

热点排行