添加主从表的数据!

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

作者: skyqingtian   发布时间: 2011-06-10

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

作者: KFCU   发布时间: 2011-06-10


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


作者: maco_wang   发布时间: 2011-06-10

用字符串写法简单些,大概
SQL code
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

--没测试

作者: KFCU   发布时间: 2011-06-10

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

作者: skyqingtian   发布时间: 2011-06-10

这能叫疑难问题?

作者: asftrhgjhkjlkttttttt   发布时间: 2011-06-10

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

作者: cd731107   发布时间: 2011-06-10

SQL code
--可以的, 示例操作如下:
--加个事务就能保证两个表的数据同步的更新到数据库
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

作者: cd731107   发布时间: 2011-06-10

SQL code
--可以的, 示例操作如下:
--加个事务就能保证两个表的数据同步的更新到数据库
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

作者: cd731107   发布时间: 2011-06-10

b表的数据和a表的不一样的!只是有个主外键关联的关系而已!

作者: skyqingtian   发布时间: 2011-06-10

引用 9 楼 skyqingtian 的回复:
b表的数据和a表的不一样的!只是有个主外键关联的关系而已!

那根据自己的实际情况修改一下

作者: cd731107   发布时间: 2011-06-10

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

作者: yes20090314   发布时间: 2011-06-10

SQL code
begin tran
    --a表
    declare @nid int;
    insert into  a(name) select  '李四'
    --b表

    set @nid = SCOPE_IDENTITY();
    insert into b(name,nid) select '你的数据',@nid

if @@ERROR=0
    commit
else 
    rollback

作者: abcjun188   发布时间: 2011-06-10