簡體   English   中英

從Sql Server語句的默認輸出中刪除Root XML節點

[英]Remove Root XML nodes from default output of Sql Server statement

我希望@MyActualXMLOut看起來像@MyDesiredXMLOut ...怎么樣? 提前致謝!

@MyDesiredXMLOut =

<MyRequiredRoot>
  <Property1>Value1</Property1>
  <Property2>Value2</Property2>
</MyRequiredRoot>

@MyActualXMLOut

<_x0040_MyTableVar>
  <MyXML>
    <MyRequiredRoot>
      <Property1>Value1</Property1>
      <Property2>Value2</Property2>
    </MyRequiredRoot>
  </MyXML>
</_x0040_MyTableVar>

下面的代碼可以按原樣運行...

DECLARE @MyDesiredXMLOut XML;
DECLARE @MyActualXMLOut XML;

SELECT @MyDesiredXMLOut =
   CONVERT( XML, 
   '<MyRequiredRoot><Property1>Value1</Property1>
      <Property2>Value2</Property2>
    </MyRequiredRoot>' );

DECLARE @MyTableVar table( ID int NOT NULL, MyXML XML NOT NULL );

INSERT INTO @MyTableVar VALUES( 1, @MyDesiredXMLOut )

SELECT @MyActualXMLOut = 
    ( SELECT MyXML
      FROM   @MyTableVar
      WHERE  ID = 1
      FOR XML AUTO )

SELECT @MyDesiredXMLOut;

SELECT @MyActualXMLOut;

您可以使用query('/')

SELECT  @MyActualXMLOut = 
        (   SELECT  MyXML.query ('/') 
            FROM    @MyTableVar 
            WHERE   ID = 1
            FOR     XML PATH('')
        )

FOR XML AUTO嘗試添加有關表名(可能包含無效XML元素名稱的字符)及其來源名稱的信息。

更改

SELECT @MyActualXMLOut = 
    ( SELECT MyXML
      FROM   @MyTableVar
      WHERE  ID = 1
      FOR XML AUTO )

SELECT @MyActualXMLOut = 
    ( SELECT MyXML as '*'
      FROM   @MyTableVar
      WHERE  ID = 1
      FOR XML PATH('') )

說明: as '*'告訴SQL Server您只需要直接使用列值,所以不要使用列名作為標記名; FOR XML PATH('')表示您不想在輸出周圍添加任何其他根節點,只需按原樣使用即可。

我不知道這是否是現實生活中的例子,但是:

表中的值已經 XML ...

放棄FOR XML AUTO (無論如何,應該指出PATH ):

SELECT @MyActualXMLOut = 
    ( SELECT MyXML
      FROM   @MyTableVar
      WHERE  ID = 1);

甚至更簡單

SELECT @MyActualXMLOut = MyXML
FROM   @MyTableVar
WHERE  ID = 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM