A seleção de vários esquemas em uma instrução SELECT

votos
1

O db a ser acedido é em floco de neve; não é certo sobre os detalhes de armazenamento nos bastidores.

Eu tenho uma consulta agora que cria uma nova visão de 41 tabelas de dados armazenados em esquemas separados sob o mesmo banco de dados, é algo como isto:

CREATE VIEW all_data AS
SELECT * FROM db.schema1.data UNION ALL
SELECT * FROM db.schema2.data UNION ALL
SELECT * FROM db.schema3.data

Esta consulta é executado diariamente. Meu problema é que eu obter novas tabelas de dados adicionados a cada poucos dias e eu tenho que ir manualmente editar a consulta para incluir essas novas tabelas, como eles são armazenados sob esquemas separados (e o esquema de nomeação para o schemas não é consistente, quer, por razões fora do meu controle). Existe uma maneira que eu posso selecionar todos os esquemas dentro de um banco de dados com uma subconsulta que me permita executar a consulta diária sem a necessidade de atualizações manuais quando novos + tabelas esquemas são adicionados?

Eu gostaria a consulta resultante de ter uma estrutura um pouco como

CREATE VIEW all_data as 
SELECT * FROM [SELECT schemas from db].data

mas não tenho certeza como isso funciona e como a união dos dados resultantes corretamente.

Publicado 09/09/2016 em 15:26
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Infelizmente, em floco de neve você não pode construir dinamicamente instruções SQL (ainda). Pode, claro, fazer o que você deseja alcançar através de um script em um dos idiomas suportados (por exemplo, Python, JS), pela primeira encontrar todos os esquemas e, em seguida, construir uma instrução SQL completa.

Espero que isto ajude.

Respondeu 10/09/2016 em 16:31
fonte usuário

votos
0

Você pode definitivamente consultar a lista de tabela e esquema disponível. Autoridade SQL tem um bom artigo sobre ele: http://blog.sqlauthority.com/2009/06/17/sql-server-list-schema-name-and-table-name-for-database/

Em suma a consulta acaba sendo ao longo destas linhas para puxar a lista de tabelas e esquema:

SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']'
AS SchemaTable
FROM sys.tables

Embora você terá que adicionar um nome de banco de dados para a cláusula WHERE para apontar para o DB adequada.

Respondeu 09/09/2016 em 15:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more