【问题标题】:How do I select xml element attributes using a stored procedure?如何使用存储过程选择 xml 元素属性?
【发布时间】:2012-12-02 18:58:55
【问题描述】:

好的,我现在有这个存储过程的代码。

ALTER PROC [dbo].[Readxml]
@xmlparam XML
AS
BEGIN
SET NOCOUNT ON
DECLARE @CustomerXml AS XML
SET @CustomerXml = @xmlparam

INSERT INTO Custtable.dbo.SPCustomer
(
    CustomerId,
    CustomerName
)
SELECT 
    Customer.attribute.value('CustomerId[1]', 'nvarchar(255)') AS CustomerId,
    Customer.attribute.value('Name[1]', 'nvarchar(255)') AS CustomerName
FROM 
    @xmlparam.nodes('Customers/Customer') AS Customer(attribute)
END

我的 XML 看起来像这样(简化)。

<Customers>
  <Customer CustomerId="94" Name="name1" />
  <Customer CustomerId="95" Name="name2" />
  <Customer CustomerId="96" Name="name3" />
</Customers>

现在我的代码无法获取属性值,据我了解,我正在尝试获取 &lt;Customer&gt; 标记内的元素,称为 CustomerIdName,它们不存在。

当从表中选择所有行时,在过程完成后,我得到所有行但具有 NULL 值。

我的问题,如何从 XML 中获取属性?

提前致谢!

【问题讨论】:

    标签: sql xml tsql stored-procedures


    【解决方案1】:

    你需要这个:

    SELECT 
        Customer.attribute.value('@CustomerId', 'nvarchar(255)') AS CustomerId,
        Customer.attribute.value('@Name', 'nvarchar(255)') AS CustomerName
    FROM 
        @xmlparam.nodes('Customers/Customer') AS Customer(attribute)
    

    要获取属性,请使用前导@

    【讨论】:

    • 谢谢!效果很好,八分钟后我会接受你的回答!
    【解决方案2】:
    ALTER PROC [dbo].[Readxml]
    @xmlparam XML
    AS
    BEGIN
    SET NOCOUNT ON
    DECLARE @CustomerXml AS XML
    SET @CustomerXml = @xmlparam
    
    INSERT INTO Custtable.dbo.SPCustomer
    (
        CustomerId,
        CustomerName
    )
    SELECT Customer.attribute.value('@CustomerId', 'BIGINT') AS CustomerId,
        Customer.attribute.value('@Name', 'nvarchar(255)') AS CustomerName
    FROM @xmlparam.nodes('Customers/Customer') AS Customer(attribute)
    
    END
    

    【讨论】:

    • 不知道是谁先看到了marc_s。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2019-07-20
    • 2013-07-09
    • 2010-12-17
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多