現在、SQLテーブルでXMLデータ型を使用しています
私のデータテーブルは次のようになります
Id | Name | Surname | Title | Location | Artist |
-------------------------------------------------------
1 | xxx | abc | def | London | XML |
2 | xxx | abc | def | Oslo | XML |
3 | xxx | abc | def | New York | XML |
私のXMLファイルは次のようになります
<song category="gaming">
<title>Valentine's Day</title>
<artist-main>Fatfinger</artist-main>
<artist-featured>Slimthumb</artist-featured>
<year>2013</year>
<price>29.99</price>
<album>Gamestain</album>
<albumimg>http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg</albumimg>
<songurl>http://www.youtube.com/watch?v=-J0ABq9TnCw</songurl>
アーティストに応じてレコードを取得するために、次のクエリを使用しています。
SELECT
Id, Name, Surname, Title
FROM
DATA
WHERE
Artist Like '%Fatfinger%' -- (this is user input)
これはSQLでXMLデータをクエリする際の正しいアプローチですか、それともXMLを処理できるSQLの組み込み関数はありますか。私はSQLを初めて使用します。
これを試して:
declare @table table (
Id int, Name varchar(50), Surname varchar(50),
Title varchar(50), Location varchar(50), Artist xml)
insert into @table (Id, Name, Surname, Title, Location , Artist )
values(1, 'xxx', 'abc', 'def', 'London', '<song category="gaming"></song>
<title>Valentines Day</title>
<artist-main>Fatfinger</artist-main>
<artist-featured>Slimthumb</artist-featured>
<year>2013</year>
<price>29.99</price>
<album>Gamestain</album>
<albumimg>http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg</albumimg>
<songurl>http://www.youtube.com/watch?v=-J0ABq9TnCw</songurl>')
SELECT Id, Name, Surname, Title
FROM @table
WHERE Artist.value('(/artist-main)[1]','varchar(max)') LIKE '%FatFinger%'
.value関数を使用する必要があります。
SELECT Id, Name, Surname, Title
FROM DATA
WHERE Artist.value('(/song/artist-main)[1]','varchar(max)') LIKE '%FatFinger%'