Sql server 如何将SQL Server表中的XML从一种格式写入另一种格式?
我有个问题。我有一个SQL Server表,它在一列中存储了大量XML文档。我需要将这些XML文档传递给XML解析器,但启动XML的格式不是解析器可以接受的格式。这是我必须处理的问题- 存储在我的SQL Server表中的XML采用以下格式:Sql server 如何将SQL Server表中的XML从一种格式写入另一种格式?,sql-server,xml,Sql Server,Xml,我有个问题。我有一个SQL Server表,它在一列中存储了大量XML文档。我需要将这些XML文档传递给XML解析器,但启动XML的格式不是解析器可以接受的格式。这是我必须处理的问题- 存储在我的SQL Server表中的XML采用以下格式: <Document ID="207"> <Version>1.0</Version> <LastModifiedInVersion>1.0</LastModifiedInVersion>
<Document ID="207">
<Version>1.0</Version>
<LastModifiedInVersion>1.0</LastModifiedInVersion>
<Signatures />
<Controls>
<Control ID="EmpID">
<Value>45678</Value>
</Control>
<Control ID="EmpFN">
<Value>Ryn</Value>
</Control>
<Control ID="EmpLN">
<Value>Veris</Value>
</Control>
<Control ID="EmpDOB">
<Value>01/19/1980</Value>
</Control>
</Controls>
<AutoKeys />
</Document>
1
1
45678
莱恩
威利斯
01/19/1980
我需要使用XML并使其看起来像这样:
<xml_record>
<employee>
<EmpID value="45678"/>
<EmpFN value="Ryn"/>
<EmpLN value="Veris"/>
<empDOB value="01/19/1980"/>
</employee>
</xml_record>
我考虑过使用XSLT,但它似乎都是基于在浏览器中显示XML数据,而不是实际格式的翻译。我的最终目标只是转换格式,并使用XML解析器提取员工值以填充另一个表,我不需要任何原始XML的其余部分。我想做的事情可能吗?如果是这样的话,给我指出正确的方向就好了。试试这个:
DECLARE @xdoc xml = '<Document ID="207">
<Version>1.0</Version>
<LastModifiedInVersion>1.0</LastModifiedInVersion>
<Signatures />
<Controls>
<Control ID="EmpID">
<Value>45678</Value>
</Control>
<Control ID="EmpFN">
<Value>Ryn</Value>
</Control>
<Control ID="EmpLN">
<Value>Veris</Value>
</Control>
<Control ID="EmpDOB">
<Value>01/19/1980</Value>
</Control>
</Controls>
<AutoKeys />
</Document>
'
SELECT
EmpID 'EmpID/@value',
EmpFN 'EmpFN/@value',
EmpLN 'EmpLN/@value',
EmpDOB 'EmpDOB/@value'
FROM (
SELECT
@xdoc.query('//Control[@ID = "EmpID"]/Value').value('.','INT') AS EmpID,
@xdoc.query('//Control[@ID = "EmpFN"]/Value').value('.','VARCHAR(100)') AS EmpFN,
@xdoc.query('//Control[@ID = "EmpLN"]/Value').value('.','VARCHAR(100)') AS EmpLN,
@xdoc.query('//Control[@ID = "EmpDOB"]/Value').value('.','VARCHAR(100)') AS EmpDOB
)t
FOR XML PATH('employee'), ROOT('xml_record')
DECLARE@xdoc-xml='1〕
1
1
45678
莱恩
威利斯
01/19/1980
'
挑选
EmpID'EmpID/@value',
EmpFN‘EmpFN/@value’,
empn'empn/@value',
EmpDOB‘EmpDOB/@value’
从(
挑选
@xdoc.query('//Control[@ID=“EmpID”]/Value')。值('.','INT')作为EmpID,
@xdoc.query('//Control[@ID=“EmpFN”]/Value')。值('.','VARCHAR(100)'作为EmpFN,
@xdoc.query('//Control[@ID=“empn”]/Value')。值('.','VARCHAR(100)'作为empn,
@xdoc.query('//Control[@ID=“EmpDOB”]/Value')。值('.','VARCHAR(100)')作为EmpDOB
)t
对于XML路径('employee'),根('XML_记录')
这不是最优雅的,但很有效。不知道MS环境中是否存在这样的库,但这听起来像是一个XQuery任务。看看这里,SQL Server似乎有一些XQuery支持。哇,我得试一试!我会让你知道它是如何运作的,非常感谢你的投入!