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
asIDENTITY
。。。我需要获取第二个表中第一个表的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片段发布到注释中-几乎无法阅读!请改为:通过编辑更新您的原始问题,并在那里提供信息-谢谢!