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

Например:
DROP TABLE #t
CREATE TABLE #t	(x	int)

DECLARE @x	int

PRINT '@x=' + ISNULL( CAST(@x AS varchar(max)), 'null')

SELECT @x=x FROM t 

PRINT '@x=' + ISNULL( CAST(@x AS varchar(max)), 'null')

SET @x=4

PRINT '@x=' + ISNULL( CAST(@x AS varchar(max)), 'null')

SELECT @x=x FROM t 

PRINT '@x=' + ISNULL( CAST(@x AS varchar(max)), 'null')


ответ

@x=null
@x=null
@x=4
@x=4


Значение сохранилось, но правильно ли это?
Т.е. корректен ли этот код, задача определить получены ли данные или запрос вернул пустой рекордсет.
SET @x=-1

SELECT @x=x FROM t 

IF @x=-1
	PRINT 'Пустой набор' //(с допущением конечно, что всегда @x > 0 )
ELSE
	PRINT 'x получило значение'
10 дек 13, 01:30    [15268090]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
sdet
Member

Откуда:
Сообщений: 463
nor5598,
Для этого есть @@ROWCOUNT
10 дек 13, 01:41    [15268102]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
nor5598
Guest
sdet
nor5598,
Для этого есть @@ROWCOUNT


я знаю про роукаунт, меня интересует корректно ли проверять это описанным мной способом?
10 дек 13, 02:43    [15268155]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
nor5598
Т.е. корректен ли этот код, задача определить получены ли данные или запрос вернул пустой рекордсет.
Абсолютно не корректный код. Для этого есть @@rowcount или exists.

З.Ы. CAST(@x AS varchar(max)) для инта - вообще адъ. Пианиста надо пострелять за это.
10 дек 13, 03:45    [15268179]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
nor5598
Guest
Гавриленко Сергей Алексеевич
nor5598
Т.е. корректен ли этот код, задача определить получены ли данные или запрос вернул пустой рекордсет.
Абсолютно не корректный код. Для этого есть @@rowcount или exists.

З.Ы. CAST(@x AS varchar(max)) для инта - вообще адъ. Пианиста надо пострелять за это.


спасибо.
10 дек 13, 10:20    [15268961]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
Glory
Member

Откуда:
Сообщений: 104760
nor5598
Можно ли быть уверенным, что значение переменной не изменится в случае, если запрос вернул пустой рекордсет?

SELECT @local_variable (Transact-SQL)

If the SELECT statement returns no rows, the variable retains its present value. If expression is a scalar subquery that returns no value, the variable is set to NULL.
10 дек 13, 10:26    [15269014]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, а то что-то затупил  [new]
nor5598
Guest
Теперь всё логично. Спасибо!

Glory
nor5598
Можно ли быть уверенным, что значение переменной не изменится в случае, если запрос вернул пустой рекордсет?

SELECT @local_variable (Transact-SQL)

If the SELECT statement returns no rows, the variable retains its present value. If expression is a scalar subquery that returns no value, the variable is set to NULL.
10 дек 13, 11:45    [15269703]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить