У меня есть следующие образцы данных:
-- Table 1: A_Series
create table A_Series
(
series varchar(10)
);
insert into A_Series values('A101'),('A102'),('A103'),('A104');
-- Table 1: B_Series
create table B_Series
(
series varchar(10)
);
insert into B_Series values('B101'),('B102'),('B103'),('B104');
Теперь у меня есть заданные входные значения для поиска в таблицах серий на основе переданных входных значений.
Например:
DECLARE @input varchar(255) = 'A101,B102,A104'
Я хочу сгенерировать оператор SELECT
, как показано ниже:
Ожидаемый результат :
select series
from A_Series
where series in ('A101','A104')
union
select series
from B_Series
where series in ('B102')
Объяснение вышеуказанного ожидаемого результата: Если заданное входное значение имеет A
Series, то нам нужно искать в A_Series
Table, если значение B
series, то
поиск в таблице B_Series
с соответствующими сериями в пункте WHERE
.
Моя попытка :
DECLARE @input varchar(255) = 'A101,B102,A104'
DECLARE @query varchar(max) = ''
DECLARE @Series_Where varchar(max) = ''
SET @query = ' SELECT STUFF((SELECT '' SELECT * FROM [''+cast(name AS varchar(200))+''] UNION ALL '' AS [text()] FROM sys.tables t
WHERE SUBSTRING(t.name,1,6) IN (SELECT SUBSTRING(Item,3,2)+''_SDR'' FROM udf_Split('''+@input+''','',''))
FOR XML PATH('''')
), 1, 1, '''')';
PRINT(@query);
Невозможно создать WHERE
, как показано в запросе ожидаемого результата.