Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 关联多个表_Sql Server_Sql Server 2008_Stored Procedures_Biztalk_Biztalk 2010 - Fatal编程技术网

Sql server 关联多个表

Sql server 关联多个表,sql-server,sql-server-2008,stored-procedures,biztalk,biztalk-2010,Sql Server,Sql Server 2008,Stored Procedures,Biztalk,Biztalk 2010,我试图扩展上面的链接 我的问题是: 我有三个表…前两个表有idasIDENTITY。。。我需要获取第二个表中第一个表的id 然后我需要得到第三个表中第一个和第二个表的id。。。。。我能够将第一个表的id放入第二个表 但是我无法将第二个表的id放入第三个表……….我正在使用WCF SQL适配器来使用存储过程,我的存储过程如下所示 CREATE Procedure [dbo].[InsertHeader] ( @parHeader As Header READONLY, @parHead

我试图扩展上面的链接

我的问题是:

我有三个表…前两个表有
id
as
IDENTITY
。。。我需要获取第二个表中第一个表的
id

然后我需要得到第三个表中第一个和第二个表的
id
。。。。。我能够将第一个表的
id
放入第二个表

但是我无法将第二个表的
id
放入第三个表……….我正在使用WCF SQL适配器来使用存储过程,我的存储过程如下所示

CREATE Procedure [dbo].[InsertHeader]
(
   @parHeader As Header READONLY,
   @parHeader_Details As HeaderDetails READONLY,
   @parHeader_Details1 As HeaderDetails1 READONLY
)
AS
 SET NOCOUNT ON

 BEGIN

 DECLARE @id int, @id1 int

 INSERT INTO EDI834_5010_Header([File_Name_EDI834], [ST01], [ST02], [ST03], 
                                [BGN01__TransactionSetPurposeCode],
                                [BGN02__TransactionSetIdentifierCode],
                                [BGN03__TransactionSetCreationDate],
                                [BGN04__TransactionSetCreationTime],
                                [BGN08__ActionCode], [SE01], [SE02])
    SELECT  
       [File_Name_EDI834], [ST01], [ST02], [ST03],
       [BGN01__TransactionSetPurposeCode], [BGN02__TransactionSetIdentifierCode],
       [BGN03__TransactionSetCreationDate], [BGN04__TransactionSetCreationTime],  
       [BGN08__ActionCode], [SE01], [SE02] 
    FROM @parHeader;

 SET @id = @@IDENTITY;

 INSERT INTO EDI834_5010_2000([Header_Id], [INS01__InsuredIndicator],
                              [INS02__IndividualRelationshipCode],
                              [INS03__MaintenanceTypeCode],
                              [INS04__MaintenanceReasonCode],
                              [INS05__BenefitStatusCode])
    SELECT @id, [INS01__InsuredIndicator], [INS02__IndividualRelationshipCode],
           [INS03__MaintenanceTypeCode], [INS04__MaintenanceReasonCode],
           [INS05__BenefitStatusCode] 
    FROM @parHeader_Details;

 SET @id1 = @@IDENTITY;

 INSERT INTO EDI834_5010_2300Loop([Id_Header_Id], [Id_Loop2000],
                                  [HD01_MaintenanceTypeCode], [HD03_InsuranceLineCode],
                                  [HD04_PlanCoverageDescription])
    SELECT @id, @id1,
           HD01_MaintenanceTypeCode, HD03_InsuranceLineCode,
           HD04_PlanCoverageDescription 
    FROM @parHeader_Details1;

  RETURN @id1;
 END
 <Header details>

         <Header_Details1>  data   </Header_Details>

          <Header_Details1>  data   </Header_Details>

           <Header_Details1>  data   </Header_Details>

  <Header_details>

  <Header details>

         <Header_Details1>  data   </Header_Details>

          <Header_Details1>  data   </Header_Details>

           <Header_Details1>  data   </Header_Details>

  <Header_details>
要将第二个表的
id
转换为第三个表,我需要在存储过程中更改什么。。。。。。。xml中有很多循环,所以我需要在第三个表中获得适当的ID

我的数据是这样的

CREATE Procedure [dbo].[InsertHeader]
(
   @parHeader As Header READONLY,
   @parHeader_Details As HeaderDetails READONLY,
   @parHeader_Details1 As HeaderDetails1 READONLY
)
AS
 SET NOCOUNT ON

 BEGIN

 DECLARE @id int, @id1 int

 INSERT INTO EDI834_5010_Header([File_Name_EDI834], [ST01], [ST02], [ST03], 
                                [BGN01__TransactionSetPurposeCode],
                                [BGN02__TransactionSetIdentifierCode],
                                [BGN03__TransactionSetCreationDate],
                                [BGN04__TransactionSetCreationTime],
                                [BGN08__ActionCode], [SE01], [SE02])
    SELECT  
       [File_Name_EDI834], [ST01], [ST02], [ST03],
       [BGN01__TransactionSetPurposeCode], [BGN02__TransactionSetIdentifierCode],
       [BGN03__TransactionSetCreationDate], [BGN04__TransactionSetCreationTime],  
       [BGN08__ActionCode], [SE01], [SE02] 
    FROM @parHeader;

 SET @id = @@IDENTITY;

 INSERT INTO EDI834_5010_2000([Header_Id], [INS01__InsuredIndicator],
                              [INS02__IndividualRelationshipCode],
                              [INS03__MaintenanceTypeCode],
                              [INS04__MaintenanceReasonCode],
                              [INS05__BenefitStatusCode])
    SELECT @id, [INS01__InsuredIndicator], [INS02__IndividualRelationshipCode],
           [INS03__MaintenanceTypeCode], [INS04__MaintenanceReasonCode],
           [INS05__BenefitStatusCode] 
    FROM @parHeader_Details;

 SET @id1 = @@IDENTITY;

 INSERT INTO EDI834_5010_2300Loop([Id_Header_Id], [Id_Loop2000],
                                  [HD01_MaintenanceTypeCode], [HD03_InsuranceLineCode],
                                  [HD04_PlanCoverageDescription])
    SELECT @id, @id1,
           HD01_MaintenanceTypeCode, HD03_InsuranceLineCode,
           HD04_PlanCoverageDescription 
    FROM @parHeader_Details1;

  RETURN @id1;
 END
 <Header details>

         <Header_Details1>  data   </Header_Details>

          <Header_Details1>  data   </Header_Details>

           <Header_Details1>  data   </Header_Details>

  <Header_details>

  <Header details>

         <Header_Details1>  data   </Header_Details>

          <Header_Details1>  data   </Header_Details>

           <Header_Details1>  data   </Header_Details>

  <Header_details>


数据
数据
数据
数据
数据
数据

好吧,您的主要问题是:您不仅插入了一行,还插入了一大堆行

因此,虽然您可以使用
@@IDENTITY
来获取最后插入的标识值(顺便说一句:我建议使用
SCOPE\u IDENTITY()
),但这将仅对一行有效

您需要的是一种输出多个插入标识的机制-:

对于第一条语句,这将把所有插入的标识值输出到表变量
@InsertedIDs

现在,对于第二个表,是否有任何列可以将第一个和第二个插入的ID关联起来??您需要将第二个
INSERT
中插入的标识值捕获到同一个表变量中,但您需要知道与
ID2
关联的
ID1
——坦率地说,我不知道在您的语句中会如何做


但最终,您将拥有一个包含n行
(ID1,ID2)
的表变量,您可以使用它插入第三个表。

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(
{}
)在编辑器工具栏上,可以很好地格式化和语法高亮显示它!。。。把长队分成短队也会有帮助。很多。到底是谁想出了这些表格和列名?!?!??!?!?嘿,马克:)关于列名和表名,这些是837 x12文件……只有列是这样的我的数据看起来像这样的数据data@user1104946:请不要将大文本或XML片段发布到注释中-几乎无法阅读!请改为:通过编辑更新您的原始问题,并在那里提供信息-谢谢!