【发布时间】:2018-02-20 09:45:09
【问题描述】:
我有 2 张桌子:tblProduct 和 tblTransaction。
请看下面的代码,这是我迄今为止尝试过的:-
'<ArrayOfProduct>
<Product>
<GetSetParameter>
<Parameter>
<PClientID>2</PClientID>
<PParameterID>1</PParameterID>
</Parameter>
<Parameter>
<PClientID>2</PClientID>
<PParameterID>2</PParameterID>
</Parameter>
</GetSetParameter>
<PProductName>Yellow</PProductName>
<PDescription>rtrtret</PDescription>
<PClientID>2</PClientID>
<PFromdate>2018/02/20</PFromdate>
<PTodate>2018/02/20</PTodate>
</Product>
<Product>
<GetSetParameter>
<Parameter>
<PClientID>2</PClientID>
<PParameterID>1</PParameterID>
</Parameter>
<Parameter>
<PClientID>2</PClientID>
<PParameterID>2</PParameterID>
</Parameter>
<Parameter>
<PClientID>2</PClientID>
<PParameterID>3</PParameterID>
</Parameter>
</GetSetParameter>
<PProductName>green</PProductName>
<PDescription>rtrtret</PDescription>
<PClientID>2</PClientID>
<PFromdate>2018/02/20</PFromdate>
<PTodate>2018/02/20</PTodate>
</Product>
</ArrayOfProduct>'
这是我的数据。 我想将我的数据插入到 2 个表产品和参数中。第一个产品数据将插入,生成的 id 将插入参数表。
改变程序 xmlOrderInsert(
@order nvarchar(max)
)
AS
DECLARE @index int, @OID int
EXEC sp_xml_preparedocument @index OUTPUT, @order
BEGIN TRANSACTION
insert into Tbl_ProductMaster
(ProductName,
ProductDescription,
ClientID ,
IsActive ,
Fromdate,
Todate
)
select PProductName,PDescription,PClientID,'True' as PisActive ,PFromdate,PTodate
FROM OPENXML (@index, '/ArrayOfProduct/Product',2) WITH ( PProductName varchar(50),
PDescription varchar(6),
PClientID varchar(30),
PFromdate datetime,
PTodate datetime )
IF @@ERROR<>0 BEGIN ROLLBACK TRANSACTION RETURN -100 END
SET @OID = SCOPE_IDENTITY()
INSERT INTO [Tbl_ParameterTransact] ( ProdID, ClientID, ParameterID)
--(2,1,1,@OID)
SELECT @OID AS ProductID,PClientID, PParameterID
FROM OpenXml( @index, '/ArrayOfProduct/Product/GetSetParameter/Parameter',2) WITH
( PClientID int, PParameterID int )
IF @@ERROR<>0 BEGIN ROLLBACK TRANSACTION RETURN -101 END
COMMIT TRANSACTION
EXEC sp_xml_removedocument @index SELECT @OID AS ProductID
这就是我想要的:-
【问题讨论】:
-
你不能这样做。您的问题是您一次性将所有行插入 Tbl_ProductMaster 表中。你必须改变你的逻辑: 1 - 你将产品插入 Tbl_ProductMaster 1 by 1 2 - 在每次插入结束时,获取 IDENTITY_SCOPE 并插入 Tbl_ParameterTransact
标签: sql sql-server xml sqlxml