Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 переменная в @xml.exist  [new]
любитель xml
Guest
Добрый день!
Есть XML, нужно выполнить ряд XPath проверок.
Как сделать лучше, учитывая, что

declare @xml xml
declare @str nvarchar(max)
select @xml.exist(@str)

приводит к ошибке

Msg 8172, Level 16, State 1, Line 3
The argument 1 of the xml data type method "exist" must be a string literal.

Сейчас сделал примено так :
-- готовимся к проверке - заполняем временную таблицу
if object_id('tempdb..#bit') is not null 
	drop table #bit
create table #bit 
	(	  _xml xml
		, _result bit null)

insert into #bit (_xml) 
select @XML_File

declare @sql nvarchar(max)
select @sql = N'
	declare @xml xml
	select top 1 @xml = _xml 
		from #bit
	update #bit set _result = (select @xml.exist('''+replace(@XPath,'''','''''')+'''))'
exec (@sql)

-- поскольку в @xml.exist передать переменную не получается, будет через .опу :)
select @_Result = _result from #bit

Можно ли как более по-человечески?
15 июл 09, 15:52    [7419644]     Ответить | Цитировать Сообщить модератору
 Re: переменная в @xml.exist  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Можно ли как более по-человечески?

там совсем-совсем любое условие может быть?
а то, может, и функции sql:variable хватит?

ну, и даже если не хватит, - можно вместо exec() и временной таблицы
sp_executesql с output-параметром использовать.

Posted via ActualForum NNTP Server 1.4

15 июл 09, 16:47    [7420107]     Ответить | Цитировать Сообщить модератору
 Re: переменная в @xml.exist  [new]
любитель xml
Guest
daw
там совсем-совсем любое условие может быть?
а то, может, и функции sql:variable хватит?
Ну да, указанный пользователем (админом) XPath.
Может и хватит, я такой функцией не пользовался ещё. :)
Спасибо, пойду ка посмотрю

daw
sp_executesql с output-параметром использовать.
А пока не посмотрю, остановлюсь на этом :)

Спасибо, daw!
15 июл 09, 16:52    [7420149]     Ответить | Цитировать Сообщить модератору
 Re: переменная в @xml.exist  [new]
любитель xml
Guest
daw
а то, может, и функции sql:variable хватит?

declare @xml xml
set @xml = N'
		<idd>
			<id>123</id>
			<id_type>RINN</id_type>
		</idd>
		<idd>
			<id>234</id>
			<id_type>OGRN</id_type>
		</idd>
		<idd>
			<id>345</id>
			<id_type>RBIK</id_type>
		</idd>'
declare @str varchar(max)
set @str = 'sfhudfjdjk'
select @xml.exist('sql:variable("@str")')
select @xml.exist('/idd/id')
select @xml.exist('/idd/id2')
-----
1
(1 row(s) affected)
-----
1
(1 row(s) affected)
-----
0
(1 row(s) affected)
-----

Видимо я не очень понял эту функцию :(
15 июл 09, 17:28    [7420386]     Ответить | Цитировать Сообщить модератору
 Re: переменная в @xml.exist  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

нет, так нельзя. вот если б надо было значение искать:
set @str = 'RBIK'
select @xml.exist('/idd[id_type=sql:variable("@str")]')

Posted via ActualForum NNTP Server 1.4

15 июл 09, 17:34    [7420430]     Ответить | Цитировать Сообщить модератору
 Re: переменная в @xml.exist  [new]
любитель xml
Guest
daw

нет, так нельзя. вот если б надо было значение искать:
set @str = 'RBIK'
select @xml.exist('/idd[id_type=sql:variable("@str")]')

Понятно, почитаем ещё. :)
Merci !
15 июл 09, 17:42    [7420511]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить