如何同时插入所有表

编程入门 行业动态 更新时间:2024-10-26 17:34:51
本文介绍了如何同时插入所有表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我试图使用输出参数同时插入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 ( 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 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_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 , @ 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 ) 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() 返回 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[^]

更多推荐

如何同时插入所有表

本文发布于:2023-10-14 12:13:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1491035.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!