Подтвердить что ты не робот

Присвоение переменной внутри предложения IF EXISTS

Попытка назначить переменную внутри предложения if exists для TSQL

DECLARE @myvar  int

IF EXISTS (SELECT @myvar = theTable.varIWant..... )

Я думал, что это сработает, но, видимо, нет? Или, возможно (скорее), я делаю это неправильно.

4b9b3361

Ответ 1

В моей установке SQL Server 2008 R2 он просто не компилируется. Парсер жалуется на наличие неправильного синтаксиса рядом с =.

Я полагаю, что он должен иметь какое-то отношение к смещению присвоения значений и извлечению данных в одном операторе SELECT, который не разрешен в SQL Server: у вас может быть один или другой. Поскольку, когда вы назначаете значения, набор строк не возвращается, но предикат EXISTS ожидает, что это назначение не может быть разрешено в этом контексте, поэтому, чтобы избежать путаницы, возможно, ограничение было явно введено.

Ваше обходное решение, о котором вы говорите в комментарии, является достойным, но может плохо работать где-то посередине пакета, когда переменная уже получила значение перед назначением. Поэтому я, вероятно, использовал бы это обходное решение:

SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...

В соответствии с MSDN системная функция @@ROWCOUNT возвращает количество строк, считанных запросом.

Ответ 2

Вместо IF EXISTS вы можете просто сделать

DECLARE @myvar  int
SELECT @myvar = theTable.varIWant.....;
IF @myvar IS NULL
BEGIN...

Ответ 3

Это не сработает, потому что в EXISTS сервер sql-сервера просто проверяет, существует ли какая-либо строка, и не имеет значения раздел select-columns или assign. Это делается для оптимизации производительности.

Ответ 4

Вы пробовали считать?

SELECT @Exists =  CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
FROM [dbname].[dbo].[tableorviewname];