Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неожиданное поведение select с xml переменной  [new]
tunknown
Member

Откуда:
Сообщений: 759
Версия Express 12.0.5000.0 (X64)

Select умеет вычислять множественные выражения с любыми типами данных и функциями кроме переменных xml и их методов. В случае xml переменной вычисляется только первое выражение.
declare	@x	xml
	,@d	date
	,@v	sql_variant
	,@s	varchar ( max )
	,@j	int
select	@x=	'<v d="20191022"/>'
	,@d=	@x.value ( 'v[1]/@d',	'date' )
	,@v=	1
	,@s=	1
	,@j=	convert ( int,	@v )+	convert ( int,	@s )+	1
select	@d				--!!! NULL !!!
	,@j				--3
	,@x.value ( 'v[1]/@d',	'date' )--2019-10-22
Вместо NULL ожидалось заполненное значение.

В документации описание такого поведения найти не удалось. Может кто видел, где описано?
22 окт 19, 11:55    [21999674]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданное поведение select с xml переменной  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1357
tunknown,

у Вас по плану Xml Reader будет рассчитываться раньше чем происходит assign variables, поэтому ему на вход будет поступать @x=NULL

вот так будет работать
declare	@x	xml
	,@d	date
	,@v	sql_variant
	,@s	varchar ( max )
	,@j	int
select		@x= T.c
	,@d=	 T.c.value ( '(/v/@d)[1]',	'date' )
	,@v=	1
	,@s=	cast(@v as int)+1
	,@j=	convert ( int,	@v )+	convert ( int,	@s )+	1
from (select cast('<v d="20191022"/>' as xml)) T(c)
     
select	@d				--!!! NULL !!!
	,@j				--3
	,@x.value ( 'v[1]/@d',	'date' )--2019-10-22
22 окт 19, 12:21    [21999700]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданное поведение select с xml переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
tunknown,

скорее дело в порядке присвоения, и вполне возможно что XQuery просто не видит это.

автор
If there are multiple assignment clauses in a single SELECT statement, SQL Server does not guarantee the order of evaluation of the expressions.
22 окт 19, 12:21    [21999701]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданное поведение select с xml переменной  [new]
iiyama
Member

Откуда:
Сообщений: 642
tunknown,

ссылка

Warning

If there are multiple assignment clauses in a single SELECT statement, SQL Server does not guarantee the order of evaluation of the expressions. Note that effects are only visible if there are references among the assignments.
22 окт 19, 12:22    [21999703]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданное поведение select с xml переменной  [new]
tunknown
Member

Откуда:
Сообщений: 759
Благодарю. Даже в BOL 2005 это указано.
22 окт 19, 12:50    [21999739]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить