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

Откуда: Подмосковье
Сообщений: 330
Делаю приблизительно так:
declare	@field	varchar(16)	= 'value1'

select	top 1 @field = t.field
from	table1 t
where	-- условие

select	@field


Если условие обеспечивает выбор 1 или более записи, @field принимает требуемое значение из поля - всё как нужно.
Если по условию select НЕ возвращает записей, остаётся @field = 'value1', а по-моему, значение @field должно стать null.
Я не прав?
21 апр 17, 16:02    [20423030]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
Eleanor
Member

Откуда:
Сообщений: 2821
Делайте тогда так

set @field = 
(select top 1 t.field
from	table1 t
where	-- условие
)
21 апр 17, 16:06    [20423052]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 330
Сделать-то можно по-разному.
Хочется понять, как правильно, и запомнить.
Мне было бы удобно извлекать за 1 select не одно поле, а несколько, но отслеживать случай, когда запрос ничего не вернул.
Был уверен, что при этом присвоится null, а оказалось, что это не так.
21 апр 17, 16:25    [20423125]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
а почему это должно поменяться-то?
вы же не получили NULL из таблицы.
не получили вообще ничего.
все как было, так и осталось
21 апр 17, 16:25    [20423126]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 330
o-o
а почему это должно поменяться-то?
вы же не получили NULL из таблицы.
не получили вообще ничего.
все как было, так и осталось


А в чём разница между "вообще ничего" и NULL ? :)
21 апр 17, 16:26    [20423132]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
логика у вас странная.
вот стоит в холодильнике кефир.
он прокис.
жена вам говорит: пойди и купи свежий.
вы идете в магаз, кефира нет.
принесли вы ничего, т.е. не принесли ничего.
вопрос: почему после вашего неудачного похода
из холодильника должен пропасть просроченный кефир?
21 апр 17, 16:28    [20423137]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
AR®
o-o
а почему это должно поменяться-то?
вы же не получили NULL из таблицы.
не получили вообще ничего.
все как было, так и осталось


А в чём разница между "вообще ничего" и NULL ? :)

да в том и разница, что если по вашему условию отберется одна строка, и в ней NULL,
то это станет новым значением переменной:
declare @t table(id int, col varchar(10));
insert into @t(id, col) values(1, 'new');
insert into @t(id) values(2);

declare	@field	varchar(10)	= 'old'

select	top 1 @field = col
from	@t
where	ID = 2;

select @field;
21 апр 17, 16:33    [20423156]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 330
А если добавить min() или max()
declare	@field	varchar(16)	= 'value1'

select	top 1 @field = max(t.field)
from	table1 t
where	-- условие

select	@field


то будет @field is null, как и нужно.
21 апр 17, 16:34    [20423159]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
roundabout
Member

Откуда:
Сообщений: 13
А какая вообще необходимость присваивать первоначальное значение, если вы хотите получить результат запроса в эту переменную
21 апр 17, 16:36    [20423174]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
потому что это агрегат, и агрегат возвращает всегда ровно 1 значение
21 апр 17, 16:38    [20423178]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
...что отражено в еще не успевшей пропасть документации:
Aggregate functions perform a calculation on a set of values and [SIZE=3][b]return a single value[/b][/SIZE]

Aggregate Functions (Transact-SQL)
21 апр 17, 16:41    [20423192]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
o-o
Guest
т.е. в нашем примере с кефиром
магазин меняется на "беспроигрышную лотерею".
если по условию беспроигрышности тебе всегда хоть что-то да дают,
то на место кефира что-то да положишь
21 апр 17, 16:44    [20423200]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 330
roundabout
А какая вообще необходимость присваивать первоначальное значение, если вы хотите получить результат запроса в эту переменную


В приведённом примере - чисто иллюстративная.
21 апр 17, 16:44    [20423203]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7686
AR®,

Вы не понимаете, что NULL - это такое же значение, как и 1, -100, 0 и т.п.
NULL не означает "отсутствие результата", NULL - это тоже результат.
24 апр 17, 12:19    [20428476]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов,
автор
Вы не понимаете, что NULL - это такое же значение, как и 1, -100, 0 и т.п.
так и запишем....
24 апр 17, 12:28    [20428512]     Ответить | Цитировать Сообщить модератору
 Re: Не изменяется значение переменной - правильно ли это?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
AR®
Не изменяется значение переменной - правильно ли это?
Да, правильно.
Ибо об этом написано в документации
https://msdn.microsoft.com/ru-RU/library/ms187330.aspx
Если инструкция SELECT не возвращает ни одной строки, переменная сохраняет свое текущее значение
24 апр 17, 12:42    [20428598]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить