我目前正在尝试整理一些可以告诉我每个客户使用的两个重要表的名称的东西。遗憾的是,这些表的名称并不总是相同,所以我目前想出了以下 T-SQL;
create table #test ( [Database] sysname,
[TenantId] sysname,
[TasksTable] sysname,
[TimeRecordTable] sysname )
insert into #test
select db_name() as [Database],
SCHEMA_NAME(tbl.schema_id) as [TenantId],
tbl.name AS [TasksTable],
tbl2.name AS [TimeRecordTable]
from sys.tables tbl,
sys.tables tbl2
where tbl.name IN ('Tasks', 'Task', 'Tasks_NEW', 'Task_NEW')
and tbl2.name IN ('TaskTimeRecord','TaskTimeRecord_NEW')
and SCHEMA_NAME(tbl.schema_id) = '2'
select * from #test
drop table #test
运行此程序时,我得到了 200 多行重复数据,而不是包含我正在寻找的结果的单行。
有人对如何使它工作有任何建议吗?
您可以使用子查询
但是,如果子查询返回多个表名,则查询将失败并出现以下错误:
如果可以返回多个表名
如果由于多个表名导致子查询出现问题,您可以使用
FOR XML PATH('')
.如果子查询和主查询都可以返回多个表名
而且每个模式仍然需要一行,您可以创建两个逗号分隔的字符串