有两个表 a表,b表
a表里面有两个字段id,name,id是自动增长的
b表里面有三个字段id,name,nid ,id是自动增长的,nid是a表id的外键
现在需要用一个存储过程,插入a、b两表里面的数据
a表只需要插一行数据,b表会插多行数据,并且与a表关联,这个用一条存储过程可以实现吗?

解决方案 »

  1.   

    可以,参数是aname,bname的集合,这个集合可以用XML,也可以用字符串,自己约定好分隔符就可以了
      

  2.   


    --一个存储过程里面可以有多条SQL 语句。
    insert into a select * from table where id=1--一条语句
    insert into b select * from table --多条语句
      

  3.   

    用字符串写法简单些,大概
    create procedure pr_insert_aandb
    @aName nvarchar(20)
    ,@bNames nvarchar(2000)
    as SET NOCOUNT ON; 
    SET XACT_ABORT ON;
            DECLARE @AID INT
            DECLARE @SQL NVARCHAR(4000)
    BEGIN TRAN
            INSERT INTO A(NAME) VALUES(@ANAME)
    SELECT @AID = SCOPE_IDENTITY ()
            SET @SQL = N'INSERT B(NAME,NID) SELECT ''' + REPLACE(@BNAMES,',',''',@AID UNION ALL SELECT ''') + ''',@AID '        EXEC SP_EXECUTESQL @SQL,N'@AID INT',@AID
    COMMIT TRAN
    GO
    --没测试
      

  4.   

    补充一下,要保证两个表的数据同步的更新到数据库中!不能出现a表数据插进去了,b表没插进去,或者b表数据没插完全的情况!
      

  5.   

    --可以的, 示例操作如下:
    --a表
    insert a(name) values '张三'
    --b表
    insert b(name,nid) select a.name,SCOPE_IDENTITY() from a where a.id=SCOPE_IDENTITY()
      

  6.   

    --可以的, 示例操作如下:
    --加个事务就能保证两个表的数据同步的更新到数据库
    begin tran
    --a表
    insert a(name) values '张三'
    --b表
    insert b(name,nid) select a.name,SCOPE_IDENTITY() from a where a.id=SCOPE_IDENTITY()
    commit
      

  7.   

    --可以的, 示例操作如下:
    --加个事务就能保证两个表的数据同步的更新到数据库
    begin tran
    --a表
    insert a(name) values '张三'
    --b表
    insert b(name,nid) select a.name,SCOPE_IDENTITY() from a where a.id=SCOPE_IDENTITY()if @@ERROR=0
    commit
    else 
    rollback
      

  8.   

    可以,参数是aname,bname的集合,这个集合可以用XML,也可以用字符串,自己约定好分隔符就可以了
      

  9.   

    begin tran
        --a表
        declare @nid int;
        insert into  a(name) select  '李四'
        --b表    set @nid = SCOPE_IDENTITY();
        insert into b(name,nid) select '你的数据',@nidif @@ERROR=0
        commit
    else 
        rollback
      

  10.   

    主从表的Insert不需要用存储过程吧,有写存储过程的时间两条InSert语句早都解决了!
    Insert Into a
    Select '业务部'Insert Into b
    Select '内贸部', Id From a Where name = '业务部'
    Union
    Select '外贸部',Id From a Where name = '业务部'