2013-11-25 5 views
0

запрос я бегу не функционирует должным образом, вот мой код:XML-запрос в SQL Server 2005

select a.id, a.userid, c.firstname + ' ' + c.lastname AS Name, a.objectid, a.settings, 
CAST(settings as XML).exist('property[@name=''colFirstChoiceVendorPaymentTerms'']') as first, 
CAST(settings as XML).exist('property[@name="colSecondChoiceVendorPaymentTerms"]//property[@name=''Visible'' and text()=''true'']') as second, 
CAST(settings as XML).exist('property[@name="colThirdChoiceVendorPaymentTerms"]//property[@name=''Visible'' and text()=''true'']') as third 
FROM wcukopera05.vstx.dbo.screenlayout a 
join wcuksql01.hrsystem.dbo.person c 
on  a.UserId=c.Id 
where a.objectid = 'gridViewCustomerCurrentRatesCosts' 

У меня есть длинный кусок XML и я хочу, чтобы проверить некоторые свойства, такие как (colThirdChoiceVendorPaymentTerms) присутствуют в XML И, чтобы убедиться, что видимость истинна.

В минуту мой код возвращает все правильные столбцы, но значения для «первого», «второго» и «третьего» все возвращается 0. Но некоторые из них должны быть возвращающейся 1 ...

I Столбцы Не понимаю, почему все они возвращаются 0?

Я загрузил XML здесь: txt.do/dev1 вы увидите, что видимость для colFirstChoiceVendorPaymentTerms и colSecondChoiceVendorPaymentTerms установлена ​​в значение true. но нет видимости для colThirdChoiceVendorPaymentTerms. это то, что я хочу проверить. если видимость и столбец есть или нет.

Еще раз благодарю вас за помощь.

ответ

0
'property[@name="colSecondChoiceVendorPaymentTerms"]//property[@name=''Visible'' and text()=''true'']' 

Я не понимаю, почему все они все возвращают 0?

  1. Вы ищете свойство корневого узла.
  2. Вы сравниваете атрибут @name, где вы должны сравнить с значением узла
  3. Вы слишком глубокий уровень собственности, когда начинаете искать свойство с именем Visible.

Ваше должно выглядеть так.

'//property[.="colSecondChoiceVendorPaymentTerms"]/../property[@name=''Visible'' and text()=''true'']' 

Или вы не можете использовать глубокий поиск и использовать значение, чтобы получить значение узла @name="Visible".

settings.value('(/XtraSerializer/property/property[property/@name="Name" and property = "colSecondChoiceVendorPaymentTerms"]/property[@name = "Visible"])[1]', 'bit') 
+0

Спасибо, это решило проблему. – jeffry