Страницы

Поиск по вопросам

понедельник, 3 декабря 2018 г.

Инициализация переменной в SQL

Необходимо инициализировать переменную и присвоить ей значение, которое хранит один из столбцов таблицы. Потом надо проверить, равно ли это значение переменной 11. Пытаюсь сделать таким образом:
CREATE PROCEDURE Functions @codes INT AS DECLARE @ans INT; SET @ans = SELECT [Код ответа] FROM [SofI].[dbo].[Журнал] WHERE [Код сеанса] = @codes AND [Код вопроса] = 11
IF (@ans = 11) exec FunOther
Это наверное глупо, но я не знаю как иначе, даже не знаю как иначе (без использования переменной) проверить условие равенства. Так тоже нельзя:
IF ((SELECT [Код ответа] FROM [SofI].[dbo].[Журнал] WHERE [Код сеанса] = @codes AND [Код вопроса] = 11) = 11)
Как можно сделать проверку?


Ответ

правильный и безопасный синтаксис вашей процедуры будет таким:
CREATE PROCEDURE Functions @codes INT AS DECLARE @ans INT; SET @ans = (SELECT top 1 [Код ответа] FROM [SofI].[dbo].[Журнал] WHERE [Код сеанса] = @codes AND [Код вопроса] = 11);
IF (@ans = 11) exec FunOther
top 1 в селекте нужен для обеспечения нормальной работоспособности, когда после изменения данных таблицы ваш запрос вернет 2 значения.

P.S. Для решения текущей задачи можно было бы воспользоваться следующей конструкцией:
IF EXISTS(SELECT 1 FROM [SofI].[dbo].[Журнал] WHERE [Код сеанса] = @codes AND [Код вопроса] = 11 AND [Код ответа] = 11) exec FunOther

Комментариев нет:

Отправить комментарий