CREATE PROC dbo.procInsert
AS
BEGIN TRAN
SET NOCOUNT ON
SET ANSI_WARNINGS OFFINSERT INTO dbo.主表A select col1,col2,...... from 从表B
IF @@ERROR<>0 GOTO errhandle
COMMIT TRAN
SELECT 1errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT 0
ENDGO--成功返回1,失敗返回0
AS
BEGIN TRAN
SET NOCOUNT ON
SET ANSI_WARNINGS OFFINSERT INTO dbo.主表A select col1,col2,...... from 从表B
IF @@ERROR<>0 GOTO errhandle
COMMIT TRAN
SELECT 1errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT 0
ENDGO--成功返回1,失敗返回0
------------------------------------------------
这句话不知怎么理解,似有问题。另,请给出表结构。
--如果是这样,只要先插入主表,再插入从表就可以了啊,不用关联a1和b1的
create proc procinsert as
begin
begin trans
insert into A select ... from tableA
insert into B select ... from tableB
if @@error<>0 rollback tran
else commit tran
end
为什么不关联A1和B1呢?
外键关联如何处理呢?
TO ALL :
我把问题具体一点:
比如说
基本表A
结构:A_ID(主键,自增加),NAMEA
基本表B
结构:B_ID(主键,自增加),NAMEB,A_ID(外键)基本表A#
结构:A#_ID(主键,自增加),NAMEA#,OtherField1
基本表B#
结构:B#_ID(主键,自增加),NAMEB#,A#_ID(外键),OtherField2现在把 把A#,B# 数据中的数据 INSERT 到A,B中(A#对应A,B#对应B)求思路,不胜感激,谢谢各位了
set identity_insert A on
insert A(A_ID,NAMEA) select A_ID,NAMEA from [A#]
set identity_insert A offset identity_insert B on
insert B(B_ID,NAMEB,A_ID) select B_ID,NAMEB,A_ID from [B#]
set identity_insert B off
这样的话,要是A中的A_ID要是和A#中的A#_ID有重复的怎么办呢?
TO zheninchangjiang(我爱燕子):
我对触发器不了解,在客户端可以可以随意控制触发器么(随意建立和删除)?
set identity_insert A on
insert A(A_ID,NAMEA) select A_ID,NAMEA from [A#] aa
where not exists(select * from A where A_ID=aa.A_ID)
set identity_insert A offset identity_insert B on
insert B(B_ID,NAMEB,A_ID) select B_ID,NAMEB,A_ID from [B#]
set identity_insert B off
这样的话,要是A中的A_ID要是和A#中的A#_ID有重复的怎么办呢?
重复的你想怎么处理?是要更新A表的这条记录,还是不用管它,还是另外追加一条(id另外取)?
邹老大的处理是不管它,只插入不重复的数据.