代码之家  ›  专栏  ›  技术社区  ›  Rajesh Ronaldo

在SQL Server中使用OpenXML

  •  0
  • Rajesh Ronaldo  · 技术社区  · 8 年前

    我必须解析这些行,并从XML本身创建一个新表。

    我读了之后发现有 OpenXML 在SQL Server中。我正在使用SQL Server 2016 SP1版本。

    我遵循上面链接中关于如何使用XML的说明,但是:

    DECLARE @idoc int, @doc varchar(1000);
    

    命令成功完成。

    SET @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
       <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
          <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
          <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
       </Order>
    </Customer>
    <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
       <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
          <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
       </Order>
    </Customer>
    </ROOT>';
    

    为此,我得到:

    Msg 137,15级,状态1,第1870行
    必须声明标量变量“@doc”。

    这很奇怪,因为我刚刚在上面的命令中成功地声明了它。

    现在:

    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
    

    Msg 137,15级,状态2,第1887行
    必须声明标量变量“@idoc”。

    有什么方法可以解决这个错误?

    1 回复  |  直到 8 年前
        1
  •  0
  •   dbajtr    8 年前

    您是否单独运行每个部分?

    将整个过程作为一个脚本运行:

    DECLARE @idoc int, @doc varchar(1000);
    SET @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
       <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
          <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
          <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
       </Order>
    </Customer>
    <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
       <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
          <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
       </Order>
    </Customer>
    </ROOT>';
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
    GO