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

Откуда: Київ
Сообщений: 10428
Можно ли быть уверенным, что выполняется (1), а затем (2)?

		SELECT	-- (1) get the valid from start time to calculate from 
				@NextRunOn = CASE WHEN @ValidFrom > GETUTCDATE() THEN @ValidFrom ELSE GETUTCDATE() END, 
				-- (2) get next run time based on our valid from starting time
				@NextRunOn = dbo.GetNextRunTime(@NextRunOn, @JobScheduleId)	
4 сен 15, 12:11    [18107758]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Почему бы не переписать так, чтобы такой вопрос вообще не возникал?
4 сен 15, 12:17    [18107798]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
invm
Почему бы не переписать так, чтобы такой вопрос вообще не возникал?


я бы такое и не написал, стрёмно.
Но это я вижу в коде, написанном девелопером, который

SQL Server MVP, .Net and SQL Software architect and Developer.

не чета нам, сирым...

И стало немного странно
4 сен 15, 12:38    [18107962]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Владислав Колосов
Member

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

порядок вычислений не гарантируется.
4 сен 15, 12:38    [18107965]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8317
Использовать же "фичи" интерпретатора в серьезном приложении я бы не стал.
4 сен 15, 12:40    [18107984]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Winnipuh
Можно ли быть уверенным, что выполняется (1), а затем (2)?

а какая разница ?


Или ето в одном селекте ????
4 сен 15, 12:41    [18107994]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Winnipuh
SQL Server MVP, .Net and SQL Software architect and Developer.


Не обращайте внимания. Это коротко называется - там сям.
4 сен 15, 12:44    [18108024]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Maxx
Winnipuh
Можно ли быть уверенным, что выполняется (1), а затем (2)?

а какая разница ?


Или ето в одном селекте ????


Это так, как написано, потому и вопрос возник.
4 сен 15, 12:44    [18108030]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
Maxx,

Можно писать
A = ++ ++ B -- ;
и потом ломать голову, а что тут имелось ввиду
4 сен 15, 12:45    [18108037]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1695
Maxx
Winnipuh
Можно ли быть уверенным, что выполняется (1), а затем (2)?

а какая разница ?


Или ето в одном селекте ????


ну я не вижу второго отдельного селекта)

но рисковать бы тоже не стал в данном случае
4 сен 15, 12:45    [18108039]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8317
Winnipuh
Maxx
пропущено...

а какая разница ?


Или ето в одном селекте ????


Это так, как написано, потому и вопрос возник.


Интерпретатор рассчитывает выражения слева направо по тексту.
4 сен 15, 12:50    [18108091]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Владислав Колосов
Winnipuh
пропущено...


Это так, как написано, потому и вопрос возник.


Интерпретатор рассчитывает выражения слева направо по тексту.


Собственно, в этом вопрос был. Это гарантированный MS порядок?
4 сен 15, 12:58    [18108160]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
  declare @i int =1, @d datetime= getdate()

  select @i = @i +1, @d =dateadd(d,@i,@d)
  from (
    select a =1
	union 
	select a =2
	union
	select a =3
  ) x
  select @i,@d
4 сен 15, 12:58    [18108164]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8317
Winnipuh
Владислав Колосов
пропущено...


Интерпретатор рассчитывает выражения слева направо по тексту.


Собственно, в этом вопрос был. Это гарантированный MS порядок?


Это фича, а не гарантированный порядок, я уже писал об этом выше.
4 сен 15, 13:22    [18108360]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1695
Владислав Колосов
Winnipuh
пропущено...


Собственно, в этом вопрос был. Это гарантированный MS порядок?


Это фича, а не гарантированный порядок, я уже писал об этом выше.


кстати раз зашел вопрос, у кого нибудь был случай обратного поведения?
т.е. ситуация когда
  declare @i int, @j int
  select @i = 1,
           @j = @i + 1
  select @i, @j

@j -выдавал не предполагаемое 2, а что то отличное? (привел простой пример, но интересует именно случай когда предполагаемый порядок присвоения переменных давал непредвиденный результат? )
4 сен 15, 13:44    [18108488]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Автор того запроса овтетил мне:


автор
Hi,

as far as i know yes, that order of execution is guaranteed.
But you have me doubt it now, so I'll check.

You can easily split them up to not have any doubts
4 сен 15, 14:45    [18108898]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1695
Winnipuh
Автор того запроса овтетил мне:


автор
Hi,

as far as i know yes, that order of execution is guaranteed.
But you have me doubt it now, so I'll check.

You can easily split them up to not have any doubts


интересная позиция человека: "я уверен, что не уверен"
спросите у него откуда такая "гарантированная" последовательность выполнения? ))
4 сен 15, 15:11    [18109131]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
felix_ff
кстати раз зашел вопрос, у кого нибудь был случай обратного поведения?

В документации просто сказано:
автор
SELECT @local_variable (Transact-SQL)
...
Одна инструкция SELECT может инициализировать несколько локальных переменных.

Т.е. нигде ничего про гарантированный порядок нет.

При этом в документации не делается различий между присвоением в запросе и присвоением без него.

Если идет простое присваивание то используется оператор ASSIGN в плане, если через запрос/подзапрос, то SELECT.

Вот во втором случае, запросто:
+
use tempdb;
go
create table t1 (a int primary key, b int);
insert t1 values (1,1),(2,2),(3,3);
go

declare @i int, @j int;
select @i = (select top(1) a from t1 order by t1.a desc);
select @j = (select top(1) b from t1 where a = @i - 1);
select @i, @j;
go

declare @i int, @j int;
select 
	@i = (select top(1) a from t1 order by t1.a desc), 
	@j = (select top(1) b from t1 where a = @i - 1);

select @i, @j;
go
drop table t1;
go

Результаты:
3	2

3	NULL

насчет первого случая с ASSIGN, надо подумать, но даже если ничего не придумается - полагаться на это как минимум не стоит, т.к. нет явного упоминания этого случая в документации. Можно попробовать написать на CONNECT, чтобы разъяснили эту ситуацию.
4 сен 15, 15:18    [18109173]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8317
Это фича любого интерпретатора, не только T-SQL. Никто не гарантирует, что при очередной оптимизации (например, параллельный разбор команд строки) не изменится порядок присвоения.

Гарантируется порядок только арифметических и логических операций.
4 сен 15, 16:06    [18109545]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20960
Winnipuh
Можно ли быть уверенным, что выполняется (1), а затем (2)?

SELECT	
-- (1) get the valid from start time to calculate from 
@NextRunOn = CASE WHEN @ValidFrom > GETUTCDATE() THEN @ValidFrom ELSE GETUTCDATE() END, 
-- (2) get next run time based on our valid from starting time
@NextRunOn = dbo.GetNextRunTime(@NextRunOn, @JobScheduleId)	

Если это точная цитата, то это девелопер, вероятно, живёт в Индии... ибо для меня совсем загадка, почему не написать просто
SELECT @NextRunOn = dbo.GetNextRunTime(CASE WHEN @ValidFrom > GETUTCDATE() THEN @ValidFrom ELSE GETUTCDATE() END, @JobScheduleId)	
4 сен 15, 16:20    [18109672]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Akina
Winnipuh
Можно ли быть уверенным, что выполняется (1), а затем (2)?

SELECT	
-- (1) get the valid from start time to calculate from 
@NextRunOn = CASE WHEN @ValidFrom > GETUTCDATE() THEN @ValidFrom ELSE GETUTCDATE() END, 
-- (2) get next run time based on our valid from starting time
@NextRunOn = dbo.GetNextRunTime(@NextRunOn, @JobScheduleId)	

Если это точная цитата, то это девелопер, вероятно, живёт в Индии... ибо для меня совсем загадка, почему не написать просто
SELECT @NextRunOn = dbo.GetNextRunTime(CASE WHEN @ValidFrom > GETUTCDATE() THEN @ValidFrom ELSE GETUTCDATE() END, @JobScheduleId)	


точная, автор не индус, вроде приличный человек ;-)

http://www.sqlteam.com/article/scheduling-jobs-in-sql-server-express-2
4 сен 15, 18:30    [18110678]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Winnipuh,

А я честно говоря, сперва на другого MVP подумал, судя по вашей локации =)
Ну, и на старуху бывает проруха, не цепляйтесь сильно, молодец, что обратили внимание!
4 сен 15, 18:35    [18110698]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
0-0
Guest
Что ж вы сразу обзываетесь?
Это авторский уникальный стиль. Может быть за него и ценят.
4 сен 15, 18:35    [18110700]     Ответить | Цитировать Сообщить модератору
 Re: Как выполняется такой запрос?  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
0-0
Что ж вы сразу обзываетесь?
Это авторский уникальный стиль. Может быть за него и ценят.

В смысле, больше не за что?
4 сен 15, 19:22    [18110880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить