求一个存储过程,好的解决方案
出库单主表-----tab_out
id-------单号 <------------------------------|
time-----时间 |
name-----制单人 |
………… |
|
出库产品详细记录表-----tab_outall |
id-------产品流流水小单号 |
toid-----单号 ----------------------------------|
pro------商品编号
amount---数量
unit-----单位
tab_out是主表,当插入一张出库单时,生成的ID单号,再插入到第二张表tab_outall的toid字段。而且第二张表tab_outall是一个批量插入
有可能一个出库单,就一种商品,也有可能是多种商品。
出库单主表-----tab_out
id-------单号 <------------------------------|
time-----时间 |
name-----制单人 |
………… |
|
出库产品详细记录表-----tab_outall |
id-------产品流流水小单号 |
toid-----单号 ----------------------------------|
pro------商品编号
amount---数量
unit-----单位
tab_out是主表,当插入一张出库单时,生成的ID单号,再插入到第二张表tab_outall的toid字段。而且第二张表tab_outall是一个批量插入
有可能一个出库单,就一种商品,也有可能是多种商品。
FOR INSERT
AS
INSERT tab_outall(toid...) SELECT ID FROM INSERTED如果只是单个的ID,也可以用企业管理器级联
用 select @@Identity 获得 id 作为 toid
多个 附表项 用程序控制循环 完成
这句话对我太有用了。
建议使用 复制 技术来同步表。
如果非得触发器,那么首先你得保证有权限
参考:SQL code --创建的触发器 create trigger t_test on test for insert,update,delete as --加上下面两句,否则会提示新事务不能登记到指定事务处理器 SET XACT_ABORT ON BEGIN DISTRIBUTED TRANSACTION delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test) where id in(select id from deleted) insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test) select * from inserted COMMIT TRAN
如果你想在直接选择好详细的出库产品信息的同时创建出库单,道理也基本是相同的,也是要先创建单号,再插入详细信息。
1、创建一个创建出库单的存储过程仅仅用来添加tab_out表 将出库单信息记入其中
2、创建添加出库详细的存储过程,包含输入参数toid,如果toid为空,就首先调用创建出库单的存储过程创建一个新的出库单,然后执行插入操作。