Xml 需要将多个表中创建的数据放入一个表中

Xml 需要将多个表中创建的数据放入一个表中,xml,split,insert,create-table,insert-update,Xml,Split,Insert,Create Table,Insert Update,我对SQL比较陌生,需要一些帮助。我已经将帮助我接近目标的代码片段拼凑在一起,但没有实现目标。我的原始数据的要点如下所示: 产品-发货数量 P65238----4 P65236----2 P65240----3 我想要得到的东西的要点如下: 产品-UCC代码 P65238--001475010 P65238--001475011 P65238--001475012 P65238--001475013 P65236--001475014 P65236--001475015 P65240--0014

我对SQL比较陌生,需要一些帮助。我已经将帮助我接近目标的代码片段拼凑在一起,但没有实现目标。我的原始数据的要点如下所示:

产品-发货数量 P65238----4 P65236----2 P65240----3 我想要得到的东西的要点如下:

产品-UCC代码 P65238--001475010 P65238--001475011 P65238--001475012 P65238--001475013 P65236--001475014 P65236--001475015 P65240--001475016 P65240--001475017 P65240--001475018 必须为每批产品分配一个从:001475010开始的唯一UCC代码。以下是根据订购产品的总数量创建多个唯一UCC的代码

CREATE TABLE #TEMP(UCCs INT) 

DECLARE @UCC INT
    ,@textXML XML
    ,@data NVARCHAR(MAX) 
    ,@delimiter NVARCHAR(5)
    ,@ConCatString NVARCHAR(MAX)
    ,@LoopCounter INT
SET @ConCatString = ''
SET @UCC = 001475009 + 1
SET @LoopCounter = (
SELECT CAST(Q.DSPTOTQTY_0 AS INT)
FROM x3v6prem.PILOTNEW.SDELIVERY Q
WHERE Q.SOHNUM_0 = 'SO1300259')
IF @LoopCounter = 1 GOTO Skip_Loop
Continue_Loop:
SET @ConCatString = @ConCatString + CAST(@UCC AS NVARCHAR(MAX)) + ','
SET @UCC = @UCC + 1
SET @LoopCounter = @LoopCounter -1
IF @LoopCounter > 1 GOTO Continue_Loop
Skip_Loop:
SET @ConCatString = @ConCatString + CAST(@UCC AS NVARCHAR(MAX)) 

SELECT @data = @ConCatString,
    @delimiter = ','
SELECT    @textXML = CAST('<d>' + REPLACE(@data, @delimiter, '</d><d>') + '</d>' AS XML)
INSERT INTO #TEMP
SELECT  T.split.value('.', 'nvarchar(max)') AS data
FROM    @textXML.nodes('/d') T(split)

SELECT * FROM #TEMP
DROP TABLE #TEMP
接下来是代码,它将根据所装运的产品的数量多次复制产品ID。最后,数据将用于创建一个装运标签,该标签将放置在订购的每一箱产品上,并为每一箱显示一个唯一的条形码编号

CREATE TABLE #TEMP2(Products NVARCHAR(MAX)) 

DECLARE @Item2 NVARCHAR(MAX)
    ,@textXML2 XML
    ,@data2 NVARCHAR(MAX) 
    ,@delimiter2 NVARCHAR(5)
    ,@ConCatString2 NVARCHAR(MAX)
    ,@LoopCounter2 INT
    ,@LastLine2 INT
DECLARE CC CURSOR LOCAL FAST_FORWARD FOR
SELECT T.ITMREF_0
FROM x3v6prem.PILOTNEW.SDELIVERYD T
WHERE T.SOHNUM_0 = 'SO1300259'
ORDER BY T.SDDLIN_0
OPEN CC
SET @ConCatString2 = ''
SET @LastLine2 = (
SELECT CAST(L.DSPTOTQTY_0 AS INT)
FROM x3v6prem.PILOTNEW.SDELIVERY L
WHERE L.SOHNUM_0 = 'SO1300259')
GetNextItem2:
FETCH NEXT FROM CC INTO @Item2
IF @@FETCH_STATUS <> 0 GOTO EndBothLoops2
SET @LoopCounter2 = (
SELECT CAST(Q.QTY_0 AS INT)
FROM x3v6prem.PILOTNEW.SDELIVERYD Q
WHERE Q.SOHNUM_0 = 'SO1300259' AND Q.ITMREF_0 = @Item2)
Continue_Loop2:
IF @LoopCounter2 = 0 AND @LastLine2 > 1 GOTO GetNextItem2
SET @ConCatString2 = @ConCatString2 + CAST(@Item2 AS  NVARCHAR(MAX)) + ','
SET @LoopCounter2 = @LoopCounter2 - 1
SET @LastLine2 = @LastLine2 - 1
IF @LoopCounter2 > 0 AND @LastLine2 > 1 GOTO Continue_Loop2
IF @LoopCounter2 = 0 AND @LastLine2 > 1 GOTO GetNextItem2
SET @ConCatString2 = @ConCatString2 + CAST(@Item2 AS NVARCHAR(MAX))
EndBothLoops2:
CLOSE CC
DEALLOCATE CC
SELECT @data2 = @ConCatString2
   ,@delimiter2 = ','
SELECT    @textXML2 = CAST('<d>' + REPLACE(@data2, @delimiter2, '</d><d>') + '</d>' AS XML)

INSERT INTO #TEMP2
SELECT  T.split.value('.', 'nvarchar(max)') AS data
FROM    @textXML2.nodes('/d') T(split)

SELECT * FROM #TEMP2
DROP TABLE #TEMP2
如果我能简单地找出如何将我放在两个单独表中的输出放在一个表中,我的问题就会得到解决,我相信我可以管理其余的。我没有使用XML代码的实际经验,因此我无法辨别如何将多个列插入正在创建的表中。
其他较小的问题:我似乎无法将UCC值的格式设置为保持其前导零的方式。看起来我能够解决自己的问题。我终于能够使用IDENTITY关键字将第二个字段添加到我创建的表中。在这一点上,我仍然不确定为什么我能够添加这个字段而不是其他字段,但我将接受它!我写的代码可能仍然非常不实用,因此如果有人想帮助我使代码运行得更好,我将不胜感激!谢谢