Как создать переменную / параметр, представляющий собой строку значений в SQL SSMS, которую я могу использовать в качестве замены в предложении where? - PullRequest
0 голосов
/ 29 января 2019

Это может быть очень простой вопрос, но я боролся с этим.

У меня есть запрос SSMS, который я буду использовать несколько раз для большого набора клиентских идентификаторов.Довольно громоздко каждый раз, когда я хочу его запускать, изменять параметры во всех пунктах where.

Для простоты я хочу преобразовать запрос, подобный приведенному ниже:

SELECT
ID,
Description

From TestDb

Where ID in ('1-234908','1-345678','1-12345')

в запрос в формате ниже, так что мне нужно только один раз изменить поле переменной, и оно можетбыть примененным к моему запросу:

USE TestDb

DECLARE @ixns NVARCHAR(100)

SET @ixns = '''1-234908'',''1-345678'',''1-12345'''

SELECT 
ID,
Description

From TestDb

Where ID IN @ixns

Тем не менее, вышеуказанный формат не работает.Может ли кто-нибудь помочь мне с тем, как я могу использовать переменную varchar / string в моем предложении «где» для моего запроса, чтобы я мог запрашивать несколько идентификаторов одновременно и только однажды настроить / изменить свою переменную?

Спасибо заранее: D

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете загрузить идентификаторы во временную таблицу, используя те, в которых условие

USE TestDb

DECLARE @tmpIDs TABLE
    (     
      id VARCHAR(50)     
    )

insert into @tmpIDs values ('1-234908')
insert into @tmpIDs values ('1-345678')
insert into @tmpIDs values ('1-12345')



SELECT 
ID,
Description
From TestDb
Where ID IN (select id from @tmpIDs)
0 голосов
/ 29 января 2019

Наиболее подходящим способом является создание типа таблицы, поскольку этот тип можно передавать в качестве параметров.

1) Создание типа таблицы с помощью столбца ID.

    create type MyListID as table 
    (
        Id int not null
    )
    go

2) Создание процедуры, которая получает этот тип в качестве параметра.

    create procedure MyProcedure
                        (
                            @MyListID as MyListID readonly
                        )
    as

        select 
            column1,
            column2
            ...
        from
            MyTable
        where
            Id in (select Id from @MyListID)

3) В этом примере вы можете увидеть, как заполнить этот тип через ваше приложение ..: https://stackoverflow.com/a/25871046/8286724

0 голосов
/ 29 января 2019

Наиболее подходящим решением будет использование табличной переменной:

DECLARE @ixns TABLE (id NVARCHAR(100));
INSERT INTO @ixns(id) VALUES
('1-234908'),
('1-345678'),
('1-12345');

SELECT ID, Description
FROM TestDb
WHERE ID IN (SELECT id FROM @ixns);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...