Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 485871
            [titulo] => SQL- Juntar múltiplos SELECT de tabelas diferentes em um único resultado.
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-07-17 17:30:39
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 268754
            [status] => A
            [isExample] => 
            [NomeUsuario] => Alex Lekao
            [Apelido] => Alex - Lekao
            [Foto] => Alex-3.jpg
            [Conteudo] => Ok.

Compreendi o que vc esta querendo, mas vc ja chegou a dar uma procurada na internet?

tem um cara que disponibilizou os script ja pronto que faz uma monitoria praticamente completa dos bancos de dados, dependendo a solucao ja esta pronta, vc so precisara pegar as colunas que vc quer.

Eu por exemplo, usei parte para receber e-mails diários dos backups que foram feitos e as datas, no meu caso extremamente simples.

Se interessar, segue codigo:
[code]
USE msdb;
--Enviando um e-mail simples
EXECUTE AS USER = 'dbo'
EXEC sp_send_dbmail
@profile_name = 'DBA SQL Server',
@recipients = 'suporte@suporte.com.br',
@body = 'Monitoria do Ultimo BackUp realizado e usuario informado na Rotina de BackUp.
',
@subject = 'Monitoria de Backup',
@query = 'SELECT
T1.Name As [Nome da Base]
,Coalesce(Convert(varchar(12), MAX(T2.Backup_Finish_Date), 103),''Nao Feito BackUp'') As [Data do Ultimo BackUp]
,Coalesce(Convert(varchar(12), MAX(T2.User_Name), 103), ''NA'') As [Nome do Usuario]
FROM
sys.sysdatabases T1
LEFT OUTER JOIN
msdb.dbo.backupset T2
ON
T2.Database_Name = T1.Name
GROUP BY
T1.Name
ORDER BY
T1.Name',
@attach_query_result_as_file = 0--,
-- @query_result_separator=';',
-- @query_result_header=1,
-- @query_attachment_filename='Planilha de Produtos Atualizada.csv'
[/code]

Dependendo do que vc esta fazendo, tera que utilizar subselects, assim vc ja cria as colunas.

[quote]
Agora preciso acrescentar mais 3 colunas:
Da tabela (msdb.dbo.backupset) quero acrescentar a coluna (backup_finish_date) e (backupset.recovery_model),
Da tabela (msdb.dbo.restorehistory) quero acrescentar a coluna (restore_date)

Agora vem o pior, rsrs!!
Estou querendo essas informações sem repetir os nomes das bases.
[/quote]

Espero ter ajudado.

Abraco.

P.S.: Qqr coisa me manda e-mail e tal que seu eu souber de algo mais posso ir te ajudando por email que pode ser mais facil, ou por skype.
alex_linhares_es@yahoo.com.br ) )

SQL- Juntar múltiplos SELECT de tabelas diferentes em um único resultado.

Chipp Seven
   - 11 jul 2014

Boa tarde,
Preciso juntar o resultado de 3 tabelas em uma nova VIEW, porem não todo o conteúdo das tabelas, apenas algumas colunas onde apliquei uma condição CASE.

Aqui tenho a VIEW com a primeira tabela já com a condição CASE.
#Código
CREATE VIEW Auditar01
AS
SELECT name AS DatabaseName,
(size*8) / 1024 AS SizeMB, --Coloca Size em MB
(growth*8) / 1024 AS GrowthMB,
is_percent_growth AS GrowPercent,
physical_name AS PhysicalName,
CASE
WHEN is_percent_growth=1 THEN '1'
WHEN size>25600 and growth<1920 THEN '1' --Quando a taxa de for baixa para tamanho do banco = 1
WHEN Size>640000 and growth<500 THEN '1' --Quando a taxa de for baixa para tamanho do banco = 1
ELSE '0'
END AS Caso
FROM sys.master_files
GO

Clique na imagem para abrir em uma nova janela
Agora quero acrescentar mais 2 SELECT de duas outras tabelas na mesma VIEW Com colunas especificas.
Da tabela (msdb.dbo.backupset) quero acrescentar a coluna (backup_finish_date) e (backupset.recovery_model),
Da tabela (msdb.dbo.restorehistory) quero acrescentar a coluna (restore_date)

Então eu tentei assim:
#Código
ALTER VIEW Auditar01
AS
SELECT sys.master_files.name AS DatabaseName, (sys.master_files.size*8) / 1024 AS SizeMB, (sys.master_files.growth*8) / 1024 AS GrowthMB,
sys.master_files.is_percent_growth AS GrowPercent, sys.master_files.physical_name AS PhysicalName,
msdb.dbo.backupset.backup_finish_date AS UltimoBackup, msdb.dbo.backupset.recovery_model AS TipoDeBackup,
msdb.dbo.restorehistory.restore_date AS UltimoRestore,
CASE
WHEN is_percent_growth=1 THEN '1'
WHEN size>25600 and growth<1920 THEN '1'
WHEN Size>640000 and growth<500 THEN '1'
ELSE '0'
END AS Caso
FROM sys.master_files, msdb.dbo.backupset, msdb.dbo.restorehistory
GO

Nesse caso ele funciona porem quando aplico em um servidor que nunca tenha feito um backup ou restore, as tabelas de msdb.dbo.backupset e msdb.dbo.restorehistory estão vazias e quando acontece isso minha VIEW retorna com todos os campos em branco, mesmo os campos do SELECT na tabela sys.master_files onde deveria voltar pelo monos os nomes dos bancos.
Quando o servidor já realizou um bkp e restore tudo funciona corretamente.
Clique na imagem para abrir em uma nova janela

Já tentei usar UNION e JOIN. Mas não consigo com q ele retorne a consulta SELECT apenas com as colunas que preciso.
Preciso que retorne os 3 SELECT com apenas as colunas especificas, unindo resultados duplicados e sem afetar minha condição CASE!!
Alguém pode dar uma ajudinha? vlz!!

Post mais votado

Alex Lekao
   - 17 jul 2014

Ok.

Compreendi o que vc esta querendo, mas vc ja chegou a dar uma procurada na internet?

tem um cara que disponibilizou os script ja pronto que faz uma monitoria praticamente completa dos bancos de dados, dependendo a solucao ja esta pronta, vc so precisara pegar as colunas que vc quer.

Eu por exemplo, usei parte para receber e-mails diários dos backups que foram feitos e as datas, no meu caso extremamente simples.

Se interessar, segue codigo:
#Código
USE msdb;
--Enviando um e-mail simples
EXECUTE AS USER = 'dbo'
EXEC sp_send_dbmail
@profile_name = 'DBA SQL Server',
@recipients = 'suporte@suporte.com.br',
@body = 'Monitoria do Ultimo BackUp realizado e usuario informado na Rotina de BackUp.
',
@subject = 'Monitoria de Backup',
@query = 'SELECT
T1.Name As [Nome da Base]
,Coalesce(Convert(varchar(12), MAX(T2.Backup_Finish_Date), 103),''Nao Feito BackUp'') As [Data do Ultimo BackUp]
,Coalesce(Convert(varchar(12), MAX(T2.User_Name), 103), ''NA'') As [Nome do Usuario]
FROM
sys.sysdatabases T1
LEFT OUTER JOIN
msdb.dbo.backupset T2
ON
T2.Database_Name = T1.Name
GROUP BY
T1.Name
ORDER BY
T1.Name',
@attach_query_result_as_file = 0--,
-- @query_result_separator=';',
-- @query_result_header=1,
-- @query_attachment_filename='Planilha de Produtos Atualizada.csv'


Dependendo do que vc esta fazendo, tera que utilizar subselects, assim vc ja cria as colunas.

Citação:

Agora preciso acrescentar mais 3 colunas:
Da tabela (msdb.dbo.backupset) quero acrescentar a coluna (backup_finish_date) e (backupset.recovery_model),
Da tabela (msdb.dbo.restorehistory) quero acrescentar a coluna (restore_date)

Agora vem o pior, rsrs!!
Estou querendo essas informações sem repetir os nomes das bases.


Espero ter ajudado.

Abraco.

P.S.: Qqr coisa me manda e-mail e tal que seu eu souber de algo mais posso ir te ajudando por email que pode ser mais facil, ou por skype.
alex_linhares_es@yahoo.com.br

Alex Lekao
   - 17 jul 2014

Ola Boa tarde!!!

Desculpe, mas nao entendi muito bem.

Sugiro vc fazer o seguinte para ver se ajuda.

#Código
SELECT
CAMPO1,
CAMPO2,
CASO
FROM (
COLOQUE AGORA OS SEUS SELECTS COM UNION OU JOIN ETC.
) AS REL(AQUI PODE SER QQR NOME)
DAQUI PARA BAIXO VC PODE USAR GROUP BY, ORDER BY, O QUE VC QUISER.


teste e me diga se deu certo ou se atendeu a sua necessidade.

Abraco.

Chipp Seven
   - 17 jul 2014

Ola Alex,
Ficou meio confuso mesmo, vou tentar explicar melhor,
Preciso fazer um relatório dos bancos de um servidor contendo informações especificas,
Essas informações eu encontrei em três tabelas do SQL

#Código
SELECT * FROM sys.master_files
SELECT * FROM msdb.dbo.backupset
SELECT * FROM msdb.dbo.restorehistory


Preciso criar uma unica view contendo colunas especificas destas 3 tabelas, para importar por um outro programa posteriormente.

Criei uma view que está funcionando direitinho: (Auditar01) que aparece na primeira imagem.
Ela contem 5 colunas da tabela sys.master_files. (name, size, growth, is_percent_growth e physical_name)

Agora preciso acrescentar mais 3 colunas:
Da tabela (msdb.dbo.backupset) quero acrescentar a coluna (backup_finish_date) e (backupset.recovery_model),
Da tabela (msdb.dbo.restorehistory) quero acrescentar a coluna (restore_date)

Agora vem o pior, rsrs!!
Estou querendo essas informações sem repetir os nomes das bases.

Tive algum progresso.

A primeira view eu mantive com estava só mudei o nome. (TamanhoDatabases1)
#Código
create VIEW TamanhoDatabases1
AS
SELECT name AS DatabaseName, (size*8) / 1024 AS SizeMB, (growth*8) / 1024 AS GrowthMB, is_percent_growth AS GrowPercent, physical_name AS PhysicalName,
CASE
WHEN is_percent_growth=1 THEN '1'
WHEN size>25600 and growth<1920 THEN '1'
WHEN Size>640000 and growth<500 THEN '1'
ELSE '0'
END AS Caso
FROM sys.master_files
GO


---------

Então criei uma segunda view p/ remover os nomes duplicados das bases (TamanhoDatabases2)
#Código
CREATE VIEW TamanhoDatabases2
AS
SELECT backup_set_id, media_set_id, database_name, backup_finish_date, recovery_model
FROM msdb.dbo.backupset WHERE backup_set_id IN (select max(backup_set_id)
FROM msdb.dbo.backupset group by all database_name)
GO


----------

E uma terceira view p/ unir as duas (TamanhoDatabases3)
#Código
create view TamanhoDatabases3
AS
SELECT * FROM TamanhoDatabases1
INNER JOIN TamanhoDatabases2
ON TamanhoDatabases1.DatabaseName
= TamanhoDatabases2.database_name
GO


Agora preciso adicionar a coluna (restore_date da tabela) da tabela (msdb.dbo.restorehistory) nessa view: (TamanhoDatabases3)
Estou tentando usar a referencia da coluna (backup_set_id) que tem nas duas tabelas mas como sou novato no sql estou tendo muitaaa dificuldades!! :(

Chipp Seven
   - 18 jul 2014

Alex,
Cara eu tinha procurado na net sim! mas não encontrei o que precisava, talvez por não usar as palavras corretas na pesquisa do google.
As que encontrei não consegui fazer funcionar corretamente.

A minha maior dificuldade é pq preciso um resultado único e bem limbo sem outros campos desnecessários pois esse resultado será importado por um programa sem opções de filtro.

Essa query que vc postou é Muitoooo boa!!! Vou adequar ela p/ usar aqui!!
Muito obrigado cara!! :)

Alex Lekao
   - 18 jul 2014

Blz.

Mas vc vai continuar tentando montar a estrutura que vc mencionou acima ou vai substituir pelo que te passei?

Da uma olhada neste link que tem algumas informacoes sobre monitoria de banco de dados e resultado por email.

http://certificacaobd.com.br/2012/08/07/script-relatrio-dirio-via-e-mail-de-instncias-sql-server/

Se nao me engano o script que te passei usei uma parte do que tem neste link, faz bastante tempo que usei. rsrsr

Espero que ajude.

Se precisar de mais alguma coisa da um toque para vermos o que conseguimos.

Abraco.