Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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列成为另一列的XML节点_Sql_Sql Server_Xml_Sql Server 2008_Xslt - Fatal编程技术网

使SQL列成为另一列的XML节点

使SQL列成为另一列的XML节点,sql,sql-server,xml,sql-server-2008,xslt,Sql,Sql Server,Xml,Sql Server 2008,Xslt,我想将第一个XML文件转换为第二个XML文件的格式,本质上主要区别在于我不希望masterBatchNo的值重复。相反,我只需要masterBatchNo的一个唯一值,并将其他属性作为子节点。有什么方法可以做到这一点吗?您可以对xml路径使用,来更好地控制xml的构造方式。在派生表中使用PV_Batch创建嵌套的XML,并使用@创建属性 exists子句用于排除PV\u主批次中没有从PV\u批次生成任何子节点的行 select MB.masterBatchNo as [@masterBatchN

我想将第一个XML文件转换为第二个XML文件的格式,本质上主要区别在于我不希望masterBatchNo的值重复。相反,我只需要masterBatchNo的一个唯一值,并将其他属性作为子节点。有什么方法可以做到这一点吗?

您可以对xml路径使用
来更好地控制xml的构造方式。在派生表中使用
PV_Batch
创建嵌套的XML,并使用
@
创建属性

exists
子句用于排除
PV\u主批次
中没有从
PV\u批次
生成任何子节点的行

select MB.masterBatchNo as [@masterBatchNo],
       (
       select B.processStage as [@processStage],
              B.processBatchNo as [@processBatchNo]
       from PV_Batch as B
       where B.masterBatchNo = MB.masterBatchNo and
             B.projectid = @varProjectID
       for xml path('tempTable'), type
       )
from PV_MasterBatch as MB
where MB.stage = @varStage and
      exists (
             select *
             from PV_Batch as B
             where B.masterBatchNo = MB.masterBatchNo and
                   B.projectid = @varProjectID
             )
for xml path('PV_Batch'), root('Root')

如果不使用别名,则很难确定列来自哪些表。如果您可以发布表结构,这会有所帮助。它们基本上来自一个表,当masterBatchNo相互匹配时,内部联接将连接两个表。什么表具有
masterBatchNo
主键?
stage
来自哪个表?stage来自PV_MasterBatch表,两个表都有masterBatchNo,PV_Batch表有主键,但我认为这不重要,因为两个表都包含相同的masterBatchNo列。
masterBatchNo
PV_MasterBatch
中的主键吗?