Передача нескольких значений в переменную - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь передать значение из таблицы в переменную, которую затем могу использовать в запросе. Проблема в том, что мне нужно, чтобы переменная имела несколько значений, чего я никогда раньше не делал. Ниже приведен пример того, что я пытаюсь сделать.

CompanyID имеет несколько значений для контрольного номера. Как бы я мог передать несколько значений в переменную? Используемый мной запрос использует открытый запрос, поэтому я не могу присоединиться к временной таблице.

 declare @t table( companyid int, control_number int)
 insert into @t
 values(5555, 777),
 (5555, 720),
 (5555, 234),
 (111, 345),
 (111, 356)

 select *
 from @t

 declare @CN int
 set @CN = (select control_number from @t where companyid = 5555)

 select *
 from @table
 where control_number IN(@CN)

Ответы [ 3 ]

0 голосов
/ 13 марта 2020

Еще один способ снять кожу с кошки. Сделайте вашу вторую переменную табличной переменной. Тогда просто присоединитесь к нему.

declare @CN table (cntNbr int)
insert @CN (cntNbr)
select control_number from @t where companyid = 5555;

select t.*
from @t as t
join @CN as c
  on c.cntNbr = t.control_number;

Ссылка на ректестер: https://rextester.com/SCYCX42852

0 голосов
/ 13 марта 2020

Метод 1 (Динами c SQL):

CREATE TABLE #temp ( companyid INT, control_number INT )
INSERT INTO #temp
VALUES (5555, 777),
(5555, 720),
(5555, 234),
(111, 345),
(111, 356)

SELECT * FROM #temp

DECLARE @controlNum VARCHAR(MAX)
SELECT @controlNum = ISNULL(@controlNum + ', ', '') + CAST(control_number AS VARCHAR) FROM #temp WHERE companyid = 5555

DECLARE @sql NVARCHAR(MAX) = 'SELECT * FROM #temp WHERE control_number IN ( ' + @controlNum + ')'
EXEC sp_executesql @sql

Метод 2:

DECLARE @temp TABLE( companyid INT, control_number INT )
INSERT INTO @temp
VALUES (5555, 777),
(5555, 720),
(5555, 234),
(111, 345),
(111, 356)

SELECT * FROM @temp

SELECT * FROM @temp WHERE control_number IN (SELECT control_number FROM @temp WHERE companyid = 5555)
0 голосов
/ 13 марта 2020

Вместо того, чтобы установить его в переменную, вы можете напрямую использовать его IN следующим образом:

declare @t table( companyid int, control_number int)
 insert into @t
 values(5555, 777),
 (5555, 720),
 (5555, 234),
 (111, 345),
 (111, 356)

 select *
 from @t

 select *
 from @table
 where control_number IN(select control_number from @t where companyid = 5555)

Попробуйте, я не смог запустить это, потому что вы не поделились схема @table

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