首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SSMS中读取XML

在SSMS中读取XML
EN

Stack Overflow用户
提问于 2021-09-13 14:48:52
回答 1查看 71关注 0票数 0

我正在努力产生一个输出,给我两个长的描述,即一个用德语,一个用英语。它可以是两个记录,一个长描述列和一个lang列,或者一个记录与长描述-de和长描述-en列。到目前为止,我已经找到了两种方法,不确定哪种方法更好,但我仍然无法用它们中的任何一种方法产生确切的输出:

代码语言:javascript
复制
-- XML
DECLARE @idoc INT, @doc NVARCHAR(max);   
SET @doc ='  
<enfinity>
  <offer sku="123456">
    <sku>123456</sku>
    <long-description xml:lang="de-DE">German</long-description>
    <long-description xml:lang="en-US">English</long-description>
  </offer>
</enfinity>
';   
  


-- Method 1 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;   

SELECT *  
FROM   OPENXML (@idoc, '/enfinity/offer/long-description')   
WITH(               sku   int    '../sku',
               [long-description]      nvarchar(max)         '../long-description',
               lang         nvarchar(max)         '../@lang');
               


-- Method 2
DECLARE @T XML
SET @T = @doc

SELECT Y.ID.value('@sku', 'nvarchar(max)') as [sku],
        Y.ID.value('@long-description', 'nvarchar(max)') as [long-description-de],
        Y.ID.value('@long-description', 'nvarchar(max)') as [long-description-en]
FROM @T.nodes('/enfinity/offer') as Y(ID)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 15:13:38

请尝试以下解决方案。

要点:

使用NVARCHAR(MAX).

  • It数据类型比使用数据类型要好得多,最好不要使用微软专有的OPENXML()。它是为现已过时的Server 2000而设计的。
  • 最好使用XQuery方法.nodes().value()。从MS 2005开始,它们是可用的。

  • ,区分XML和attributes非常重要。这就是你们两次尝试都没有成功的原因。

SQL

代码语言:javascript
复制
DECLARE @doc XML = 
N'<enfinity>
  <offer sku="123456">
    <sku>123456</sku>
    <long-description xml:lang="de-DE">German</long-description>
    <long-description xml:lang="en-US">English</long-description>
  </offer>
</enfinity>';

SELECT c.value('@sku', 'nvarchar(max)') as [sku]
    , c.value('(long-description[@xml:lang="de-DE"]/text())[1]', 'nvarchar(max)') as [long-description-de]
    , c.value('(long-description[@xml:lang="en-US"]/text())[1]', 'nvarchar(max)') as [long-description-en]
FROM @doc.nodes('/enfinity/offer') as t(c);

输出

代码语言:javascript
复制
+--------+---------------------+---------------------+
|  sku   | long-description-de | long-description-en |
+--------+---------------------+---------------------+
| 123456 | German              | English             |
+--------+---------------------+---------------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69164755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档