从XML(SQL Server)将值插入表中

时间:2014-07-29 11:09:27

标签: sql-server xml

我有这个XML:

<Files>
  <File>
    <Name>pic1</Name> 
    <Description>Pics</Description> 
    <URL>URL1</URL> 
    <TypeText>jpg</TypeText> 
  </File>
  <File>
    <Name>pic2</Name> 
    <Description>Pics</Description> 
    <URL>URL2</URL> 
    <TypeText>jpg</TypeText> 
  </File>
  <File>
    <Name>pic3</Name> 
    <Description>Pics</Description> 
    <URL>URL3</URL> 
    <TypeText>jpg</TypeText> 
  </File>
</Files>

我想将它们插入SQL Server表中。我使用这段代码:

INSERT INTO #T
SELECT
    XFiles.value('/Name', 'nvarchar(120)'),
    XFiles.value('/Description', 'nvarchar(300)'),
    XFiles.value('/URL', 'nvarchar(max)'),
    XFiles.value('/TypeText', 'nvarchar(120)')
FROM @FilesXML.nodes('/Files/File')
AS XTbl(XFiles)

但它给了我错误。

XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'

我认为我在jpath部分犯了错误。是对还是错?

提前完成

1 个答案:

答案 0 :(得分:3)

您需要更改您的选择查询:

SELECT
    XFiles.value('Name[1]', 'nvarchar(120)') as Name,
    XFiles.value('Description[1]', 'nvarchar(300)'),
    XFiles.value('URL[1]', 'nvarchar(max)'),
    XFiles.value('TypeText[1]', 'nvarchar(120)')
FROM @FilesXML.nodes('/Files/File') as XTbl(XFiles)

例如,如果您只选择Name,那么XPath查询将返回Name个节点的集合 - 即使只有一个子节点! - 因此你看到了错误。您必须确保XPath查询只返回一个内容,因此添加了[1]索引器。