No momento, estou tentando montar algo que me diga o nome de duas tabelas importantes que cada um de nossos clientes usa. Infelizmente, os nomes dessas tabelas nem sempre são os mesmos, então, atualmente, criei o seguinte 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
Ao executar isso, estou obtendo mais de 200 linhas de dados duplicados, em vez de uma única linha que inclui os resultados que estou procurando.
Alguém tem alguma sugestão de como fazer isso funcionar?
Você pode usar uma subconsulta
No entanto, se houver mais de um nome de tabela retornado pela subconsulta, a consulta falhará com o seguinte erro:
Se mais de um nome de tabela puder ser retornado
Se a subconsulta for um problema devido a vários nomes de tabela, você poderá criar uma string separada por vírgula com
FOR XML PATH('')
.Se a subconsulta e a consulta principal puderem retornar vários nomes de tabela
E você ainda precisa de uma linha por esquema, você pode criar duas strings separadas por vírgula