powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неожиданное поведение select с xml переменной
5 сообщений из 5, страница 1 из 1
Неожиданное поведение select с xml переменной
    #39879803
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия Express 12.0.5000.0 (X64)

Select умеет вычислять множественные выражения с любыми типами данных и функциями кроме переменных xml и их методов. В случае xml переменной вычисляется только первое выражение.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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 ожидалось заполненное значение.

В документации описание такого поведения найти не удалось. Может кто видел, где описано?
...
Рейтинг: 0 / 0
Неожиданное поведение select с xml переменной
    #39879824
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

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

вот так будет работать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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
...
Рейтинг: 0 / 0
Неожиданное поведение select с xml переменной
    #39879825
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Неожиданное поведение select с xml переменной
    #39879826
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Неожиданное поведение select с xml переменной
    #39879847
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю. Даже в BOL 2005 это указано.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неожиданное поведение select с xml переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]