RDCAlerts
という名前のXML
型の列に次のデータを含むテーブルAliasesValue
があります。
<aliases>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Bijoy Bora</aliasName>
</alias>
</aliases>
2つの行を返すクエリを作成したいと思います。エイリアスごとに1つあり、次のクエリを試しました。
SELECT
AliasesValue.query('data(/aliases/alias/aliasType)'),
AliasesValue.query('data(/aliases/alias/aliasName)'),
FROM [RdcAlerts]
しかし、次のように1行だけを返します。
AKA AKA | Pramod Singh Bijoy Bora
Books Onlineの.nodes()メソッドを見てください。
DECLARE @r TABLE (AliasesValue XML)
INSERT INTO @r
SELECT '<aliases> <alias> <aliasType>AKA</aliasType> <aliasName>Pramod Singh</aliasName> </alias> <alias> <aliasType>AKA</aliasType> <aliasName>Bijoy Bora</aliasName> </alias> </aliases> '
SELECT c.query('data(aliasType)'), c.query('data(aliasName)')
FROM @r r CROSS APPLY AliasesValue.nodes('aliases/alias') x(c)
複数の行を返すには、_CROSS APPLY
_ステートメントを.nodes()
関数と共に使用する必要があります。
_select
a.alias.value('(aliasType/text())[1]', 'varchar(20)') as 'aliasType',
a.alias.value('(aliasName/text())[1]', 'varchar(20)') as 'aliasName'
from
RDCAlerts r
cross apply r.AliasesValue.nodes('/aliases/alias') a(alias)
_