В прошлом, когда у меня был
<Article PubModel = "Print-Electronic">
<Journal>
<ISSN IssnType = "Electronic">1360-0443</ISSN>
<JournalIssue CitedMedium = "Internet">
или
<Journal>
<ISSN IssnType = "Print">2234-943X</ISSN>
<JournalIssue CitedMedium = "Print">
<Volume>8</Volume>
Я бы вытащил номер ISSN в своей хранимой процедуре, используя
nref.value('Article[1]/Journal[1]/ISSN[1]','varchar(max)') ISSN,
Теперь я хочу определить, какой это тип ISSN, но я не уверен, куда поставить @Print или @Electronic.
я пробовал
nref.value('Article[1]/Journal[1]/ISSN[1]/@Electronic', 'varchar(max)') ISSN,
а также
nref.value('Article[1]/Journal[1]/@Electronic', 'varchar(max)') ISSN,
Ни один из них не работал. Я хочу поместить Print ISSN в поле ISSN_Print, если он есть, и Electronic в поле ISSN_Electronic, если он есть.
Спасибо за помощь





Я немного подправил ваш XML, чтобы получить рабочий пример. Но это должно дать вам то, что вы ищете:
declare @x xml = '<Journal>
<ISSN IssnType = "Print">2234-943X</ISSN>
<ISSN IssnType = "Electronic">1360-0443</ISSN>
<JournalIssue CitedMedium = "Print"/>
<Volume>8</Volume></Journal>';
select @x.value('(Journal/ISSN[@IssnType = "Print"])[1]', 'varchar(40)'),
@x.value('(Journal/ISSN[@IssnType = "Electronic"])[1]', 'varchar(40)');
В частности, вместо использования порядкового селектора (например, [1]) вы будете использовать селектор свойств.