【发布时间】:2019-08-27 03:24:57
【问题描述】:
我有以下示例数据:
-- 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系列那么我们需要在A_Series表中搜索,如果值是B系列那么
在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,如预期结果查询所示。
【问题讨论】:
-
为了澄清,按照@iamdave 的回答,您是在寻找实际的结果集,还是只是查询的脚本?
标签: sql-server tsql sql-server-2008-r2