powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Переменная в where
12 сообщений из 12, страница 1 из 1
Переменная в where
    #39644240
Tigran117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DECLARE @str NVARCHAR(50)
DECLARE @INDEX INT
IF @INDEX = 0
SET @str = ' AND fil_code = 12'
ELSE IF @INDEX = 1
SET @str = ' AND fil_code = 13'
ELSE
SET @str = ''
SELECT required_stages FROM TBL where region = 45 + @str

Подскажите пожалуйста как правильно поставить переменную @str,
Спасибо.
...
Рейтинг: 0 / 0
Переменная в where
    #39644263
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
declare @fil_code int = case @INDEX when 0 then 12 when 1 then 13 end ;
SELECT required_stages FROM TBL where region = 45 
                                                                     and   (fil_code  = @fil_code or @fil_code is null);
...
Рейтинг: 0 / 0
Переменная в where
    #39644293
Tigran117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо aleks222

можно еще один вопрос, а если мне надо будет написать так'

DECLARE @str NVARCHAR(50)
DECLARE @INDEX INT
IF @INDEX = 0
SET @str = ' AND fil_code IN (12, 14, 45)'
ELSE IF @INDEX = 1
SET @str = ' AND fil_code IN (13, 16)'
ELSE
SET @str = ''
SELECT required_stages FROM TBL where region = 45 + @str
...
Рейтинг: 0 / 0
Переменная в where
    #39644296
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно еще один вопрос, а если мне надо будет написать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @ids table( id int primary key);
DECLARE @INDEX INT
IF @INDEX = 0
  insert@ids
      values(12), (14), (45);
ELSE IF @INDEX = 1
  insert@ids
      values(13), (16);

SELECT required_stages FROM TBL where region = 45  and ( fil_code in ( select id from @ids) or not exists(select id from @ids) )



Ну, а по-уму, это решается таблицей-справочником
index, fil_code
...
Рейтинг: 0 / 0
Переменная в where
    #39644298
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
  @sText NVARCHAR(MAX),
  @sWhere NVARCHAR(50) = '',
  @index INT
;
...
IF @index = 0
  SET @sWhere = N' AND fil_code IN ( 12, 14, 45 )'
ELSE
IF @index = 1
  SET @sWhere = N' AND fil_code IN ( 13, 16 )'
;
SET @sText = N'SELECT required_stages FROM tbl WHERE region = 45' + @sWhere
;
EXECUTE sp_executesql @sText
;
...
Рейтинг: 0 / 0
Переменная в where
    #39644301
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tigran117,

Никогда не делайте во так - 21407459
Это вариант из серии "прощай индексы".
...
Рейтинг: 0 / 0
Переменная в where
    #39644303
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTigran117,
Никогда не делайте во так - 21407459
Это вариант из серии "прощай индексы".
Ну индекс-то по region будет работать...

Явно же код для выгрузки в отчетик / аналитику - а там можно и подождать... пару лет.
...
Рейтинг: 0 / 0
Переменная в where
    #39644352
Tigran117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, все более чем понятно, все OK !!!
...
Рейтинг: 0 / 0
Переменная в where
    #39644531
Rankatan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTigran117,

Никогда не делайте во так - 21407459
Это вариант из серии "прощай индексы".
Можете прояснить о чем вы? Не вижу проблем с индексами в этом коде:
Код: sql
1.
2.
declare @fil_code int = case @INDEX when 0 then 12 when 1 then 13 end ;
SELECT required_stages FROM TBL where region = 45 and   (fil_code  = @fil_code or @fil_code is null);
...
Рейтинг: 0 / 0
Переменная в where
    #39644533
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RankataninvmTigran117,

Никогда не делайте во так - 21407459
Это вариант из серии "прощай индексы".
Можете прояснить о чем вы? Не вижу проблем с индексами в этом коде:
Код: sql
1.
2.
declare @fil_code int = case @INDEX when 0 then 12 when 1 then 13 end ;
SELECT required_stages FROM TBL where region = 45 and   (fil_code  = @fil_code or @fil_code is null);


а как вы смотрите?

но вообще OPTION (RECOMPILE) и будут индексы
...
Рейтинг: 0 / 0
Переменная в where
    #39644535
Rankatan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKRankatanпропущено...

Можете прояснить о чем вы? Не вижу проблем с индексами в этом коде:
Код: sql
1.
2.
declare @fil_code int = case @INDEX when 0 then 12 when 1 then 13 end ;
SELECT required_stages FROM TBL where region = 45 and   (fil_code  = @fil_code or @fil_code is null);


а как вы смотрите?

но вообще OPTION (RECOMPILE) и будут индексы
Никак.
А почему без OPTION(REOMPILE) не будет работать индексы?
...
Рейтинг: 0 / 0
Переменная в where
    #39644538
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RankatanTaPaKпропущено...

а как вы смотрите?

но вообще OPTION (RECOMPILE) и будут индексы
Никак.
А почему без OPTION(REOMPILE) не будет работать индексы?
ну если никак не смотрите, то оно вам и не надо
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Переменная в where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]