5

SCOM 2007データウェアハウスデータベースの一部であるXMLフィールドを解析しようとしていますが、これを達成するための同様のシナリオを示す多くの例が見つかりましたが、通常、クエリを実行するとエラーが発生します。

これは例です。1000行程度でこれを実行する必要があります。ここで、値EnglandとUKを取得します(タグを構成するGUIDはデータ型ごとに一貫しているため、変更せずに使用できます)。クエリなど)。もちろん、各行には異なる都市と国のコードがあり、それをキャプチャしたいと思います。

テーブル名はdbo.ManagedEntityPropertyで、列名はPropertyXMLです。

<Root>
            <Property Guid="AFB4F9E6-BF48-1737-76AD-C9B3EC325B97">192.168.1.0</Property>
            <Property Guid="5C324096-D928-76DB-E9E7-E629DCC261B1">WASPDC01.LIV10.Local</Property>
            <Property Guid="96981E2D-DECF-7CB7-DEC5-5C52046B68A6">192.168.1.0</Property>
            <Property Guid="FA3887C3-F274-306A-867C-37105A190F78">England</Property>
            <Property Guid="61AA7309-595F-576E-337E-E9335E5CA773">255.255.255.0</Property>
            <Property Guid="F8ABF27F-A169-6FCD-1862-C06F1DB4BF24">UK</Property>
            <Property Guid="B832B2DE-A649-60A1-AC13-06F1EC601E5F">Active</Property>
</Root>

アドバイスやガイダンスはありますか?要素値のSQLServerクエリxml属性に従ってアドバイスを実装しようとしましたが、SQL XMLクエリの初期段階にあり、これまでこのようなことをする必要はありませんでした。

4

1 に答える 1

3

次のようなものを試してください。

-- declare your two GUIDs that you're interested in
DECLARE @GuidCountry UNIQUEIDENTIFIER
SET @GuidCountry = 'FA3887C3-F274-306A-867C-37105A190F78'

DECLARE @GuidCountryCode UNIQUEIDENTIFIER 
SET @GuidCountryCode = 'F8ABF27F-A169-6FCD-1862-C06F1DB4BF24'

;WITH ListOfAllProperties AS
(
    SELECT 
        ID,   -- or whatever uniquely identifies a single row in your table
        PropertyGuid = XProp.value('@Guid', 'uniqueidentifier'),
        PropertyValue = XProp.value('(.)', 'varchar(100)')
    FROM 
        dbo.ManagedEntityProperty
    CROSS APPLY
        PropertyXML.nodes('/Root/Property') AS XTbl(XProp)
)
SELECT *
FROM ListOfAllProperties
WHERE PropertyGuid IN (@GuidCountry, @GuidCountryCode)

これは基本的<Property>に、テーブル内のすべてのノードを個々の行に列挙し、それらの行から関心のある2つのアイテムを取得するときに

更新:これら2つの値を別々の列として表示する必要がある場合は、次のようなものを使用する必要があります。

SELECT 
    ID,
    CountryCode = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountryCode")]/text())[1]', 'varchar(100)'),
    CountryName = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountry")]/text())[1]', 'varchar(100)')
FROM 
    dbo.ManagedEntityProperty
于 2013-03-27T14:02:14.217 に答える