求一个存储过程,好的解决方案
出库单主表-----tab_out
id-------单号     <------------------------------|
time-----时间                                    |
name-----制单人                                  |
…………                                         |
                                                 |
出库产品详细记录表-----tab_outall                |
id-------产品流流水小单号                        |
toid-----单号  ----------------------------------|
pro------商品编号
amount---数量
unit-----单位
tab_out是主表,当插入一张出库单时,生成的ID单号,再插入到第二张表tab_outall的toid字段。而且第二张表tab_outall是一个批量插入
有可能一个出库单,就一种商品,也有可能是多种商品。

解决方案 »

  1.   

    是触发器吧,CREATE TRIGGER TRI ON tab_out
    FOR INSERT 
    AS 
       INSERT tab_outall(toid...) SELECT ID FROM INSERTED如果只是单个的ID,也可以用企业管理器级联
      

  2.   

    先插主表
    用 select @@Identity 获得 id 作为 toid
    多个 附表项 用程序控制循环 完成
      

  3.   

    建立一个插入触发器, 这样每当主表插入一条记录时都会自动触发;再可构造 sql 语句的字符串形式, 使用 exec 实现批量插入
      

  4.   

    13,14楼,两位兄弟我现在大致明白了。再可构造 sql 语句的字符串形式, 使用 exec 实现批量插入
    这句话对我太有用了。
      

  5.   

    使用触发器的话必须先创建服务器连接,然后在触发器中才能访问到。
    建议使用 复制 技术来同步表。
    如果非得触发器,那么首先你得保证有权限
    参考: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
      

  6.   

    id用变量保存  @id
      

  7.   

    LZ描述的不是很清楚,大概明白你的意思:首页要创建出库单也就是插入你的第一个表tab_out,然后才会给这个出库单上添加详细出库产品信息这个时候插入第二个表tab_outall。如果按照这个逻辑来处理就不存在表同时操作的问题了。
    如果你想在直接选择好详细的出库产品信息的同时创建出库单,道理也基本是相同的,也是要先创建单号,再插入详细信息。
      

  8.   

    解决方案
    1、创建一个创建出库单的存储过程仅仅用来添加tab_out表 将出库单信息记入其中
    2、创建添加出库详细的存储过程,包含输入参数toid,如果toid为空,就首先调用创建出库单的存储过程创建一个新的出库单,然后执行插入操作。
      

  9.   

    感觉存储过程不合适,程序里拼SQL好一点
      

  10.   

    存储过程不合适吧,你这是业务逻辑。再说,插入,删除,更新,动作多了很麻烦的吧。楼主应用场景是什么啊,记得解决了把你最后的实现给show下,兄弟们学习。