如何同时插入所有表 [英] How do the all tables get inserted simultaneously

查看:84
本文介绍了如何同时插入所有表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用输出参数同时插入5个表,但只有一个表获取值,其余表未插入,此处Emp_id是第一个键的主键,其他表是外键。 />


我的尝试:



  USE  [ctsdev] 
GO

/ * *****对象:StoredProcedure [dbo]。[usp_insertemployeeinfo]脚本日期:03/24/2016 11:33:15 * ***** /
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




创建 程序 [dbo]。[usp_insertemployeeinfo]
@Emp_id int
@ FirstName varchar 100 ),
@ MiddleName varchar 50 ),
@ LastName varchar 100 ),
@ Date_of_join date
@ Job_title varchar (< span class =code-digit> 50 ),
@ Grade varchar 50 ),
@ Department varchar ( 50 ),
@ Location varchar 100 ),
@ Date_of_birth date
@国籍 varchar 100 ),
@ Mobile_no varchar 10 ),
@ Psprt_yn varchar 1 ),
@ Passport_no varchar 8 ),
@ Date_of_issue 日期
@ Place_of_issue varchar 100 ),
@ Date_of_expiry date
@ Pancard_yn varchar 1 ),
@ Pancard_no varchar 10 ),
@ Relatives_yn varchar 1 ),
@ Relative_name varchar 100 ),
@ Relative_grade < span class =code-keyword> varchar ( 100 ),
@ Relative_dept varchar 100 ),

@ Home_adrs varchar (max),
@ Home_number varchar 10 ),
@Home_mailid varchar 100 ),
@ CHA_PHA_same varchar 1 ),
@ Contact_name varchar 100 ),
< span class =code-sdkkeyword> @ Relation varchar 100 ),
@ City varchar 100 ) ,
@ Contact_adrs varchar 100 ),
@ Contact_num varchar 100 ),

@ Qualification varchar 100 ),
@ University_board varchar 100 ),
@ Specialization varchar 100 ),
@ Year_of_passing date
@ Grade_cgpa varchar 20 ),

@ Bank_name varchar 100 ),
@ Bank_adrs varchar 100 ),
@ Account_num varchar 50 ),
@Ifsc_code varchar 50 ),
@ Name_of_acnt_holder varchar 100 ),

@ From_date date
@ To_date date
@ Organization varchar 100 ),
@ Job_title_his varchar 50 ),
@ Sal_per_mnt h varchar 50 ),
@Reasons_for_leavn varchar (max),
@ Reference_name varchar 100 ),
@ Contact_num_hist varchar 10 ),
@ Organization_ref varchar 100 ),
@Job_title_ref varchar 50 ),

@ newid int 输出
AS
BEGIN
SET NOCOUNT ON


INSERT INTO [tbl_empinfo](FirstName,MiddleName,LastName,Date_of_join,Job_title,Grade,Department,Location, Date_of_birth,国籍,Mobile_no,Psprt_yn,Passport_no,Date_of_issue,Place_of_issue,Date_of_expiry,Pancard_yn,Pancard_no,Relatives_yn,Relative_name,Relative_grade,Relative_dept)
VALUES @ FirstName @ MiddleName @ LastName ,< span class =code-sdkkeyword> @ Date_of_join , @ Job_title @ Grade @ Department @ Location @ Date_of_birth @国籍 @ Mobile_no @ Psprt_yn @ Passport_no @ Date_of_issue @ Place_of_issue @ Date_of_expiry @ Pancard_yn @ Pancard_no @Relatives_yn @ Relative_name @ Relative_grade @Relative_dept
SELECT @Emp_id = SCOPE_IDENTITY ()
SELECT @Emp_id As newid
RETURN

/ * SELECT @ identity = SCOPE_IDENTITY()* /

INSERT INTO tbl_address(Emp_id,Home_adrs,Home_number,Home_mailid,CHA_PHA_same,Contact_name,Relation,City,Contact_adrs,Contact_num)
VALUES @ Emp_id @ Home_adrs @ Home_number @ Home_mailid @ CHA_PHA_same @ Contact_name @ Relation @ City @ Contact_adrs @ Contact_num
SELECT @Emp_id = SCOPE_IDENTITY()
RETURN

INSERT INTO tbl_empeducation(Emp_id,Qualification,University_board,Specialization,Year_of_passing,Grade_cgpa)
VALUES @Emp_id @ Qualification @ University_board @ Specialization @ Year_of_passing @ Grade_cgpa
< span class =code-keyword> SELECT @Emp_id = SCOPE_IDENTITY()
RETURN


INSERT INTO tbl_bank_account_dtls(Emp_id,Bank_name,Bank_adrs,Account_num,Ifsc_code,Name_of_acnt_holder)
< span class =code-keyword> VALUES ( @ Emp_id @ Bank_name ,< span class =code-sdkkeyword> @ Bank_adrs , @ Account_num @ Ifsc_code @ Name_of_acnt_holder
SELECT @Emp_id = SCOPE_IDENTITY()
返回


INSERT INTO tbl_Employment_hist(Emp_id,From_date,To_date,Organization,Job_title_his,Sal_per_mnth,Reasons_for_leavn,Reference_name,Contact_num_hist, Organization_ref,Job_title_ref)
VALUES @ Emp_id @From_date @ To_date @ Organization @Job_title_his @ Sal_per_mnth @ Reasons_for_leavn @ Reference_name @Contact_num_hist @ Organization_ref @ Job_title_ref
SELECT @Emp_id = SCOPE_IDENTITY()
RETURN

/ * SELECT @identity AS Id * /

END


GO

解决方案

每次插入后都会从过程返回。存储过程在返回时结束。



删除返回并让程序运行到END标记。



您将获得每个选择,但这可能很难管理。我建议在最后执行一个选择:



 .... 
- insert1
选择 @ EmpId1 ,= SCOPE_IDENTITY ()
....
- - insert2
选择 @ EmpId3 ,= SCOPE_IDENTITY ()
....
- insertn
选择 @ EmpIdn ,= SCOPE_IDENTITY ()


选择 @ EmpId1 @ EmpId2 ,..., @ EmpIdn





管理恕我直言更容易,但两种方法都有效。如果您有多个选择,那么结果(在.Net中)将是一个包含多个表的DataSet


您应该尝试相同而不需要 RETURN

使用RETURN [ ^ ]

I was trying to insert into 5 tables simultaneously using output parameter,but only one table is getting value,the remaining tables are not getting inserted,Here Emp_id is the primary key for the first and foreign to the other tables.

What I have tried:

USE [ctsdev]
GO

/****** Object:  StoredProcedure [dbo].[usp_insertemployeeinfo]    Script Date: 03/24/2016 11:33:15 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE PROCEDURE [dbo].[usp_insertemployeeinfo]
@Emp_id int ,
@FirstName varchar(100),
@MiddleName varchar(50),
@LastName varchar(100),
@Date_of_join date,
@Job_title varchar(50),
@Grade varchar(50),
@Department varchar(50),
@Location varchar(100),
@Date_of_birth date,
@Nationality varchar(100),
@Mobile_no varchar(10),
@Psprt_yn varchar(1),
@Passport_no varchar(8),
@Date_of_issue date,
@Place_of_issue varchar(100),
@Date_of_expiry date,
@Pancard_yn varchar(1),
@Pancard_no varchar(10),
@Relatives_yn varchar(1),
@Relative_name varchar(100),
@Relative_grade varchar(100),
@Relative_dept varchar(100),

@Home_adrs varchar(max),
@Home_number varchar(10),
@Home_mailid varchar(100),
@CHA_PHA_same varchar(1),
@Contact_name varchar(100),
@Relation varchar(100),
@City varchar(100),
@Contact_adrs varchar(100),
@Contact_num varchar(100),

@Qualification varchar(100),
@University_board varchar(100),
@Specialization varchar(100),
@Year_of_passing date,
@Grade_cgpa varchar(20),

@Bank_name varchar(100),
@Bank_adrs varchar(100),
@Account_num varchar(50),
@Ifsc_code varchar(50),
@Name_of_acnt_holder varchar(100),

@From_date date,
@To_date date,
@Organization varchar(100),
@Job_title_his varchar(50),
@Sal_per_mnth varchar (50),
@Reasons_for_leavn varchar(max),
@Reference_name varchar(100),
@Contact_num_hist varchar(10),
@Organization_ref varchar(100),
@Job_title_ref varchar(50),

@newid int output
AS
BEGIN
SET NOCOUNT ON


INSERT INTO [tbl_empinfo ](FirstName,MiddleName,LastName,Date_of_join,Job_title,Grade,Department,Location,Date_of_birth,Nationality,Mobile_no,Psprt_yn,Passport_no,Date_of_issue, Place_of_issue,Date_of_expiry, Pancard_yn,Pancard_no,Relatives_yn, Relative_name, Relative_grade,Relative_dept )
VALUES      (@FirstName,@MiddleName,@LastName,@Date_of_join,@Job_title,@Grade,@Department,@Location,@Date_of_birth,@Nationality,@Mobile_no,@Psprt_yn,@Passport_no,@Date_of_issue,@Place_of_issue,@Date_of_expiry,@Pancard_yn,@Pancard_no,@Relatives_yn,@Relative_name,@Relative_grade,@Relative_dept)
SELECT @Emp_id = SCOPE_IDENTITY()
SELECT @Emp_id As newid
RETURN  

/*SELECT @identity=SCOPE_IDENTITY()*/

INSERT INTO tbl_address (Emp_id,Home_adrs,Home_number,Home_mailid,CHA_PHA_same,Contact_name,Relation,City,Contact_adrs,Contact_num)
VALUES     (@Emp_id,@Home_adrs,@Home_number,@Home_mailid,@CHA_PHA_same,@Contact_name,@Relation,@City,@Contact_adrs,@Contact_num)
SELECT @Emp_id=SCOPE_IDENTITY()
RETURN  

INSERT INTO tbl_empeducation (Emp_id,Qualification,University_board,Specialization,Year_of_passing,Grade_cgpa)
VALUES     (@Emp_id,@Qualification,@University_board,@Specialization,@Year_of_passing,@Grade_cgpa)
SELECT @Emp_id=SCOPE_IDENTITY()
RETURN  


INSERT INTO tbl_bank_account_dtls(Emp_id,Bank_name,Bank_adrs,Account_num,Ifsc_code,Name_of_acnt_holder)
VALUES(@Emp_id,@Bank_name,@Bank_adrs,@Account_num,@Ifsc_code,@Name_of_acnt_holder)
SELECT @Emp_id=SCOPE_IDENTITY()
RETURN  


INSERT INTO tbl_Employment_hist(Emp_id,From_date,To_date,Organization,Job_title_his,Sal_per_mnth,Reasons_for_leavn,Reference_name,Contact_num_hist,Organization_ref,Job_title_ref)
VALUES      (@Emp_id,@From_date,@To_date,@Organization,@Job_title_his,@Sal_per_mnth,@Reasons_for_leavn,@Reference_name,@Contact_num_hist,@Organization_ref,@Job_title_ref)
SELECT @Emp_id=SCOPE_IDENTITY()
RETURN  

/*SELECT @identity AS Id*/

END
         

GO

解决方案

You're returning from the procedure after every insert. The stored proc ends on return.

Remove the returns and let the procedure run to the END marker.

You will get each of the selects back, but that can be awkward to manage. I suggest performing a single select at the end:

....
--insert1
Select @EmpId1, = SCOPE_IDENTITY()
....
--insert2
Select @EmpId3, = SCOPE_IDENTITY()
....
--insertn
Select @EmpIdn, = SCOPE_IDENTITY()


Select @EmpId1, @EmpId2, ... ,@EmpIdn



It's easier to manage IMHO, but either method works. If you have multiple selects then the result (in .Net) will be a DataSet with several tables


You should try the same without RETURN
Using RETURN[^]


这篇关于如何同时插入所有表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆