2013-05-10 5 views
8

я в настоящее время использует тип данных XML в таблицы SQLГде положение при использовании XML в SQL

My DataTable выглядит как этот

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) 

Это правильный подход при запросе данных XML в SQL или существуют встроенные функции SQL, которые могут обрабатывать XML. Я новичок в SQL.

+0

Wich RDBM-х вы используете, MS SQL Server, Oracle и т.д. повторно задать свой вопрос, так что имеет лучшую видимость и, следовательно, получить некоторое внимание – Yaroslav

+0

Кроме того, проверьте XML sintax, строка 3 и 4 не имеет правильного закрывающего тега. Должно быть «artist-main» и «artist-feature». И я думаю, что в конце есть закрывающий тег ''. – Yaroslav

+0

@ Ярослав Я использую MS SQL 2012 –

ответ

11

Попробуйте это:

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%' 
+0

Вы собираетесь отвечать на все вопросы в XML-блоке :) –

+1

Нет :). Недавно я изучил xml, так что я просто знал ответ. –

+0

@Mike Могу ли я использовать оператор «=» вместо «Как» в этом утверждении? И еще одно: что означает «[1]»? благодаря –

7

Вам необходимо использовать функцию .value.

SELECT Id, Name, Surname, Title 
FROM DATA 
WHERE Artist.value('(/song/artist-main)[1]','varchar(max)') LIKE '%FatFinger%' 
+0

Могу ли я использовать оператор «=» вместо «Как» в этом утверждении? И еще одно: что означает «[1]»? Спасибо –

+0

Да, вы можете. Просто удалите символы wild-card. Кроме того, [1] указывает, что вы вернете первое значение на этом главном узле песни/исполнителя. Это то, что ты хочешь. Ссылка Джона М Ганта выше упоминает об этом. –

Смежные вопросы