Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Переменная в where / 12 сообщений из 12, страница 1 из 1
14.05.2018, 10:49
    #39644240
Tigran117
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
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
14.05.2018, 11:09
    #39644263
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
Код: 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
14.05.2018, 11:36
    #39644293
Tigran117
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
Спасибо 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
14.05.2018, 11:41
    #39644296
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
можно еще один вопрос, а если мне надо будет написать так

Код: 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
14.05.2018, 11:44
    #39644298
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
Код: 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
14.05.2018, 11:47
    #39644301
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
Tigran117,

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

Явно же код для выгрузки в отчетик / аналитику - а там можно и подождать... пару лет.
...
Рейтинг: 0 / 0
14.05.2018, 13:09
    #39644352
Tigran117
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
Спасибо всем, все более чем понятно, все OK !!!
...
Рейтинг: 0 / 0
14.05.2018, 16:45
    #39644531
Rankatan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
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
14.05.2018, 16:47
    #39644533
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
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
14.05.2018, 16:52
    #39644535
Rankatan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
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
14.05.2018, 16:53
    #39644538
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная в where
RankatanTaPaKпропущено...

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

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


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