селекта, но только в случае если срабатывает условие
Хочу что-то типа:
IF EXISTS (SELECT 0 FROM SomeTable WHERE /*SomeConditions*/) BEGIN
SELECT @SomeVariable = @@IDENTITY // Есть ли подобное для последнего селекта?
END
Или придется городить такое:
IF EXISTS (SELECT ...) BEGIN
/*Снова тот же селект, только тут уже записываем идентификатор в переменную*/
SELECT @SomeVar = id, ... FROM ... WHERE ...
END
идея туманна и не понятна, а почему просто не делать сразу выборку в переменную? и вы в курсе отличия SELECT от SET в SQL Server и в частности их поведения в случае если возвращается NULL или наоборот больше чем одно значение? https://www.mssqltips.com/sqlservertip/1888/when-to-use-set-vs-select-when-assigning-values-to-variables-in-sql-server/
Вопрос был не о select или set :)
Лучше объясните, что такое "идентификатор из последнего селекта" и зачем его присваивать переменной.
Честно говоря, я вообще не понял затею. Можешь описать на конкретном примере, что есть и что ожидаешь?
В общем, если кратко, мне нужно получить идентификатор (первичный ключ), который в таком ифе: IF EXISTS (SELECT 0 FROM Table WHERE some_another_column = /*some value*/) Причем тот селект обязательно вернет только одно значение, либо не вернет ничего вовсе, если условия не совпадают То есть вот из того селекта хочу получить значение первичного ключа. Надеюсь, я не запутанно объяснил
declare @id ...; select top (1) @id = id from ... where ... if @@rowcount > 0 ?
Да, похоже на то То есть только такой вариант есть, да? Понял. Спасибо большое!
охххх, правильно я понял, что у вас один и тот же запрос будет выполняться на проверку и присвоение переменной? чем гарантируется возврат одного значения в запросе?
Вторичный ключ, который уникален
> один и тот же запрос будет выполняться на проверку и присвоение переменной Выходит, что так, да
то есть вы хотите за место одного запроса к базе делать 2: один чтобы проверить есть ли запись, а второй чтобы получить занчение id? если да, то какая цель?
Обсуждают сегодня