我是做 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 = @BILLDELETE TEMP_KF WHERE BILL = @BILL/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
IF @@ERROR = 0 COMMIT TRANSACTION MY_ENTERDEPOTSUBMIT ELSE ROLLBACK TRANSACTION MY_ENTERDEPOTSUBMIT
GO
结构如下:
库存表: 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 = @BILLDELETE TEMP_KF WHERE BILL = @BILL/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
IF @@ERROR = 0 COMMIT TRANSACTION MY_ENTERDEPOTSUBMIT ELSE ROLLBACK TRANSACTION MY_ENTERDEPOTSUBMIT
GO
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货