有两个表 a表,b表
a表里面有两个字段id,name,id是自动增长的
b表里面有三个字段id,name,nid ,id是自动增长的,nid是a表id的外键
现在需要用一个存储过程,插入a、b两表里面的数据
a表只需要插一行数据,b表会插多行数据,并且与a表关联,这个用一条存储过程可以实现吗?
a表里面有两个字段id,name,id是自动增长的
b表里面有三个字段id,name,nid ,id是自动增长的,nid是a表id的外键
现在需要用一个存储过程,插入a、b两表里面的数据
a表只需要插一行数据,b表会插多行数据,并且与a表关联,这个用一条存储过程可以实现吗?
--一个存储过程里面可以有多条SQL 语句。
insert into a select * from table where id=1--一条语句
insert into b select * from table --多条语句
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
--没测试
--a表
insert a(name) values '张三'
--b表
insert b(name,nid) select a.name,SCOPE_IDENTITY() from a where a.id=SCOPE_IDENTITY()
--加个事务就能保证两个表的数据同步的更新到数据库
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
--加个事务就能保证两个表的数据同步的更新到数据库
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
--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
Insert Into a
Select '业务部'Insert Into b
Select '内贸部', Id From a Where name = '业务部'
Union
Select '外贸部',Id From a Where name = '业务部'