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[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>

現在のコードでは、存在しないandという<Customer>タグ内の要素を取得しようとしていることを理解しているため、属性値を取得できません。CustomerIdName

テーブルからすべての行を選択すると、手順が完了した後、すべての行が取得されますが、値は NULL になります。

私の質問ですが、XML から属性を取得するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

3

あなたはこれを必要とします:

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)

属性を取得するには、先頭の@

于 2012-12-02T19:04:30.340 に答える
1
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
于 2012-12-02T19:05:03.180 に答える