Сохранение набора значений smallint для использования в операторе in

Я хочу присвоить переменной несколько чисел, чтобы использовать ее в операторе IN, например:

declare @var smallint
set @var = 2,3,49,53,34
select something from somewhere WHERE number in @var

Однако этот тип запроса приводит к синтаксической ошибке. Я пробовал использовать несколько разных типов данных (varchar и тому подобное), но мне это тоже не понравилось, и вместо этого я получил ошибки преобразования типов данных.

Могу ли я создать массив или что-то подобное? Столбец, для которого я хочу использовать IN, относится к типу smallint, и я использую SQL 2005, если это поможет.

0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для SQL 2008 или выше:

declare @variables table (number smallint)

insert into @variables
values (0),
(1),
(2)

select something from somewhere where number in (select number from @variables)

Для SQL 2005:

declare @variables table (number smallint) 
insert into @variables (number) 
SELECT 2 
UNION ALL 
SELECT 3 
UNION ALL 
SELECT 49 
UNION ALL 
SELECT 53 
UNION ALL 
SELECT 34 

select * from @variables

Это дает мне Incorrect syntax near ','., что-то делать с оператором вставки? На базе данных SQL2008 я получаю другую ошибку, Column, parameter, or variable #1: Cannot find data type number., пока я не изменю порядок с int number на number int. Я отредактировал ваш пост. Тем не менее, в SQL 2005 все еще появляется ошибка.

Syntax Error 11.04.2018 13:12

Пришлось использовать это: declare @variables table (number smallint) insert into @variables (number) SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 49 UNION ALL SELECT 53 UNION ALL SELECT 34 select * from @variables

Syntax Error 11.04.2018 13:39

разве табличные переменные не были введены в 2008 году?

Zohar Peled 11.04.2018 13:46

@ZoharPeled Не уверен, когда это появилось, но, похоже, он работал с использованием запроса, который я прокомментировал выше, при условии, что я пытаюсь вставить только одно значение за раз или использовать объединение всех

Syntax Error 11.04.2018 14:02

Хорошо работает и на моем ... не уверен, почему это никогда не сработало для вас. Для таблицы требуется только 1 столбец, и вы вставляете только 1 столбец для каждого значения ... поэтому он должен просто работать. Это может быть версия sql, которую вы используете, я использую sql server 2016 (я думаю)

Monofuse 11.04.2018 14:17

Если вам нужно стилизовать много данных, чтобы их можно было вставить, попробуйте Notepad ++ с заменой поиска по регулярным выражениям.

Monofuse 11.04.2018 14:17

@Monofuse Да, это SQL 2005, отсюда и ограничения на вставку. Они добавили улучшенную поддержку вставок в 2008 году, но, к сожалению, я застрял на 2005 году для этого проекта. К счастью, я буквально имею дело с 5-6 числами несколько раз, так что достаточно просто набрать.

Syntax Error 11.04.2018 16:29

Другие вопросы по теме