用存储过程和触发器实现向一张表中插数据,同时另一张表也插入数据

时间:2022-10-24 00:45:49
有两张表,用存储过程实现插数据,另一张也插入,
触发器也行!多谢!

13 个解决方案

#1


create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran

#2


CREATE TRIGGER 触发器名 ON 你的表1
FOR INSERT
AS
  insert 你的表2 (列名) select (列名) from inserted

#3


触发器就是为你的要求设计的啊,具体语法大力都写了,你也可以从 BOL 上看到更多。

#4


create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran
我喜欢这种方法,易懂!

#5


好,我也问个问题,假如我现在要插入着张表是一次,但是同时我要插入另外一张表是要多次的,那应该怎么做呢?是在程序外面写,还是都在存储过程里面做呢???

#6


CREATE TRIGGER 触发器名 ON 你的表1
FOR INSERT
AS
  insert 你的表2 (列名) 
  select (列名) from inserted
  union all
  select (列名) from inserted
  ...
  union all
  select (列名) from inserted
go

呵呵,想多少次就多少次

#7


哦,对拉,插入多次的数据都是不同的啊,那怎么办?

#8


同意
create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran

#9


你说的多次是什么条件下的多次?

#10


假如我现在是要插入一个合同头,和合同的详细项,合同头可能只需要插入一次就好拉,但是合同的详细项有很多不同的项所以就要插入合同的详细项表多次,问应该如何做呢,怎么传参数呢????

#11


假设,
合同头表 PoHead (ID,PoNo..)
合同细项表 PoGoods (ID,PoHeadID,GoodsNo,Quantity...)
其中 ID 字段为自动增加 Identity

PoGoods 表中应当有一个字段作为 PoHead 表的外键,即 
PoGoods.PoHeadID -- PoHead.ID

插入 PoHead:
Insert Into PoHead (PoNo,..) values (@PoNo...)

获得刚刚插入的 PoHead 记录的 ID
DECLARE @PoHeadID INT
SET @PoHeadID=@@IDENTITY

插入 PoGoods:
Insert Into PoGoods (PoHead,GodsNo,Quantity...) values (@PoHeadID,@GoodsNo,@Quantity)

PoHead,PoGoods 两个表应当分开处理,最好设计两个 SP ,分别处理。

#12


这种问题是不是最好都时分开两个sp呢?

#13


按照关系数据设计方针,应该分成两个 SP
虽然从商业逻辑上, PoHead 和 PoGoods 属于同一张定单,但,从数据库的角度看,它们是两个独立的表,以 PoHeadID 关联。

#1


create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran

#2


CREATE TRIGGER 触发器名 ON 你的表1
FOR INSERT
AS
  insert 你的表2 (列名) select (列名) from inserted

#3


触发器就是为你的要求设计的啊,具体语法大力都写了,你也可以从 BOL 上看到更多。

#4


create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran
我喜欢这种方法,易懂!

#5


好,我也问个问题,假如我现在要插入着张表是一次,但是同时我要插入另外一张表是要多次的,那应该怎么做呢?是在程序外面写,还是都在存储过程里面做呢???

#6


CREATE TRIGGER 触发器名 ON 你的表1
FOR INSERT
AS
  insert 你的表2 (列名) 
  select (列名) from inserted
  union all
  select (列名) from inserted
  ...
  union all
  select (列名) from inserted
go

呵呵,想多少次就多少次

#7


哦,对拉,插入多次的数据都是不同的啊,那怎么办?

#8


同意
create proc 过程名
@参数 varchar(100)
as 
begin tran
  insert 你的表1 values(@参数)
  insert 你的表2 values(@参数)
commit tran

#9


你说的多次是什么条件下的多次?

#10


假如我现在是要插入一个合同头,和合同的详细项,合同头可能只需要插入一次就好拉,但是合同的详细项有很多不同的项所以就要插入合同的详细项表多次,问应该如何做呢,怎么传参数呢????

#11


假设,
合同头表 PoHead (ID,PoNo..)
合同细项表 PoGoods (ID,PoHeadID,GoodsNo,Quantity...)
其中 ID 字段为自动增加 Identity

PoGoods 表中应当有一个字段作为 PoHead 表的外键,即 
PoGoods.PoHeadID -- PoHead.ID

插入 PoHead:
Insert Into PoHead (PoNo,..) values (@PoNo...)

获得刚刚插入的 PoHead 记录的 ID
DECLARE @PoHeadID INT
SET @PoHeadID=@@IDENTITY

插入 PoGoods:
Insert Into PoGoods (PoHead,GodsNo,Quantity...) values (@PoHeadID,@GoodsNo,@Quantity)

PoHead,PoGoods 两个表应当分开处理,最好设计两个 SP ,分别处理。

#12


这种问题是不是最好都时分开两个sp呢?

#13


按照关系数据设计方针,应该分成两个 SP
虽然从商业逻辑上, PoHead 和 PoGoods 属于同一张定单,但,从数据库的角度看,它们是两个独立的表,以 PoHeadID 关联。