Compartilhar via


Referência de instrução SQL para relatórios do Configuration Manager

 

Aplica-se a: System Center 2012 Configuration Manager, System Center 2012 Configuration Manager SP1, System Center 2012 R2 Configuration Manager

Muitas instruções úteis do Microsoft SQL Server podem ser usadas durante a criação de relatórios do System Center 2012 Configuration Manager, e elas são descritas brevemente nesta seção. Para acompanhar esta discussão, você deve ter um nível básico de conhecimento em instruções de consulta SQL e a capacidade de escrever consultas como a seguinte:

SELECT Name, Comment, CollectionID

FROM v_Collection

WHERE Name LIKE 'All Windows%'

ORDER BY Name

Para obter informações sobre como escrever consultas básicas, veja a documentação do SQL Server.

Funções de agregação

As funções de agregação (como SUM, AVG, COUNT, COUNT(*), MAX e MIN) geram valores de resumo em conjuntos de resultados de consulta. Uma função de agregação (com exceção dos processos COUNT(*)) processa todos os valores selecionados em uma única coluna para produzir um valor de único resultado. As função de agregação podem ser aplicadas a todas as linhas em uma exibição, a um subconjunto da exibição especificada por uma cláusula WHERE ou a um ou mais grupos de linhas na exibição. Quando uma função de agregação é aplicada, um valor único é gerado de cada conjunto de linhas.

System_CAPS_importantImportante

Lembre-se de que os valores NULL não são incluídos nos resultados de agregação. Por exemplo, se você tiver 100 registros e 8 deles tiverem um valor de coluna NULL para a propriedade que estiver sendo contada, a contagem retornará somente 92 resultados.

Um exemplo de como usar a função de agregação COUNT(*) é exibido na consulta a seguir (do relatório predefinido Contar clientes para cada site) e no conjunto de resultados de exemplo.

SELECT v_Site.SiteCode, v_Site.SiteName, v_Site.ReportingSiteCode,

Count(SMS_Installed_Sites0) AS 'Count'

FROM v_Site, v_RA_System_SMSInstalledSites InsSite

WHERE v_Site.SiteCode = InsSite.SMS_Installed_Sites0

GROUP BY SiteCode, SiteName, ReportingSiteCode

ORDER BY SiteCode

SiteCode

SiteName

ReportingSiteCode

Contagem

ABC

Site ABC

 

928

123

123 Site

ABC

1010

Funções de data e hora

Muitos relatórios internos usam as funções de Data e Hora. As funções mais comuns usadas são GETDATE, DATEADD, DATEDIFF e DATEPART.

GETDATE ()

A função GETDATE produz a data e hora atuais no formato interno do SQL Server para valores do datetime. GETDATE assume o parâmetro () do NULL.

O seguinte exemplo resulta na data e hora atuais do sistema:

SELECT GETDATE()

(nenhum nome de coluna)

29/05/2005 10:10:03.001

DATEADD (datepart, número, data)

A função DATEADD retorna um novo valor datetime com base na adição de um intervalo à data especificada.

Datepart é o parâmetro que especifica em qual parte da data será retornado um novo valor (por exemplo, ano, mês, dia, hora, minuto e assim por diante), number é o valor usado para incrementar datepart e date é a data de início.

O seguinte exemplo resulta em uma data que está a dois dias de 29 de maio de 2005:

SELECT DATEADD([day], 2, '2005-05-29 10:10:03.001')

(nenhum nome de coluna)

31/05/2005 10:10:03.001

DATEDIFF (datepart, data de início, data de término)

A função DATEDIFF retorna o número de limites de data e hora cruzados entre duas datas especificadas.

Datepart é o parâmetro que especifica em qual parte da data será retornado um novo valor (por exemplo, ano, mês, dia, hora, minuto e assim por diante), startdate é a data de início e enddate é a data de término.

O seguinte exemplo resulta no número de minutos entre a primeira e a segunda datas:

SELECT DATEDIFF (minute, '2005-05-29 10:10:03.001',

'2005-06-12 09:28:11.111')

(nenhum nome de coluna)

20118

DATEPART (datepart, data)

A função DATEPART retorna um inteiro que representa o datepart especificado da data especificada.

Datepart é o parâmetro que especifica em qual parte da data será retornado e date é a data especificada.

O seguinte exemplo resulta no mês da data especificada:

SELECT DATEPART (month, '2005-05-29 10:10:03.001')

(nenhum nome de coluna)

5

Combinando funções de data e hora

É comum usar uma combinação de funções de Data e Hora nos relatórios do Configuration Manager.

O seguinte exemplo resulta na data e hora atuais (2005-05-29 10:10:03.001 neste exemplo) menos 100 dias:

SELECT DATEADD([day], - 100, GETDATE())

(nenhum nome de coluna)

18/02/2005 10:10:03.001

Exemplo de consulta com uso de funções de data e hora

A consulta a seguir resulta na contagem total de mensagens de status para o período de um dia. Nesta consulta, as funções COUNT, GETDATE e DATEADD são usadas, bem como o operador lógico BETWEEN e as cláusulas GROUP BY e ORDER BY.

SELECT SiteCode, MessageID, COUNT(MessageID) AS [count],

GETDATE() AS [End Date]

FROM vStatusMessages

WHERE ([Time] BETWEEN DATEADD([day], -1, GETDATE()) AND GETDATE())

AND (MessageID BETWEEN '0' AND '10000')

GROUP BY SiteCode, MessageID

ORDER BY SiteCode, MessageID

Código do Site

MessageID

Contagem

Data de Término

ABC

500

190

29/05/2005 10:10:03.001

ABC

501

130

29/05/2005 10:10:03.001

ABC

502

190

29/05/2005 10:10:03.001

ABC

1105

85

29/05/2005 10:10:03.001

ABC

1106

5

29/05/2005 10:10:03.001

JUNÇÕES

Para criar relatórios efetivos no Configuration Manager, você precisa entender como unir diferentes exibições para obter os dados esperados. Há três tipos de junções: interna, externa e cruzada. Além disso, há três tipos de junções externas: esquerda, direita e completa. A autojunção utiliza qualquer uma das junções acima, mas une registros da mesma exibição.

Junções internas

Em uma junção interna, os registros das duas exibições são combinados e adicionados aos resultados de uma consulta somente se os valores dos campos unidos atenderem a alguns critérios especificados. Se você usar uma junção interna usando o ResourceID para unir as exibições v_R_System e v_GS_WORKSTATION_STATUS, o resultado seria uma lista de todos os sistemas e sua última data de verificação de hardware.

SELECT v_R_System.Netbios_Name0 AS MachineName,

v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]

FROM v_R_System INNER JOIN v_GS_WORKSTATION_STATUS

ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID

Nome da Máquina

Última verificação de hardware

Client1

29/05/2005 10:10:03.001

Client3

12/06/2005 09:28:11.110

Junções externas

Uma junção externa retorna todas as linhas das exibições unidas, independentemente se há ou não uma linha de correspondência entre elas. A cláusula ON complementa os dados em vez de filtrá-los. Os três tipos de junções externas (esquerda, direita e completa) indicam a principal fonte de dados. As junções externas podem ser particularmente úteis quando você tiver valores NULL em uma exibição.

Junções externas esquerdas

Ao usar uma junção externa esquerda para combinar duas exibições, todas as linhas na exibição da esquerda são incluídas nos resultados. Na consulta a seguir, as exibições v_R_System e v_GS_WORKSTATION_STATUS são unidas por meio da junção externa esquerda. A exibição v_R_System é a primeira exibição listada na consulta, tornando-se a exibição da esquerda. O resultado incluirá uma lista de todos os sistemas e sua última data de verificação de hardware. Ao contrário da junção interna, os sistemas que não foram examinados quanto ao hardware ainda serão listados com um valor NULL (como visto no conjunto de resultados).

SELECT v_R_System.Netbios_Name0 AS MachineName,

v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]

FROM v_R_System LEFT OUTER JOIN v_GS_WORKSTATION_STATUS

ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID

Nome da Máquina

Última verificação de hardware

Client1

29/05/2005 10:10:03.001

Client2

NULL

Client3

12/06/2005 09:28:11.110

Junções externas direitas

Uma junção externa direita é conceitualmente igual a uma junção externa esquerda, com a exceção de que todas as linhas da exibição à direita são incluídas nos resultados.

Junção externa completa

Uma junção externa completa recupera todas as linhas de ambas as exibições unidas. Ele retorna todas as linhas emparelhadas em que a condição de junção é verdadeira, além das linhas não emparelhadas de cada exibição concatenada com linhas NULL da outra exibição. Você normalmente não desejará usar este tipo de junção externa.

União cruzada

Uma união cruzada retorna o produto de duas exibições, não a soma. Cada linha na exibição à esquerda é correspondida a cada linha na exibição à direita. É o conjunto de todas as possíveis combinações de linha, sem qualquer filtragem. No entanto, se você adicionar uma cláusula WHERE, uma junção cruzada funcionará como uma junção interna – ela usa a condição para filtrar todas as combinações de linha possíveis para aquelas que você deseja.

Autojunção

Uma autojunção usa qualquer um dos tipos de junção acima, mas é uma exibição que é unida em si mesma. Em diagramas de banco de dados, uma autojunção é chamada uma relação reflexiva.

Frase de palavra-chave NOT IN

Subconsultas com a frase de palavra-chave NOT IN são muito úteis para encontrar informações sobre um conjunto de dados que não atendam a determinados critérios. No exemplo a seguir, a consulta retorna o nome NetBIOS de todos os computadores que NÃO têm o Notepad.exe instalado. Você deve primeiro criar uma consulta que possa detectar todos os computadores com o arquivo selecionado instalado da seguinte maneira:

SELECT DISTINCT v_R_System.Netbios_Name0

FROM v_R_System INNER JOIN v_GS_SoftwareFile

ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)

WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe'

Depois de confirmar que a primeira consulta exibe todos os computadores que têm Notepad.exe instalado, a seguinte instrução de subconsulta usará a frase de palavra-chave NOT IN para encontrar todos os nomes do computador que NÃO têm o arquivo Notepad.exe instalado:

SELECT DISTINCT Netbios_Name0

FROM v_R_System

WHERE Netbios_Name0 NOT IN

(SELECT DISTINCT v_R_System.Netbios_Name0

FROM v_R_System INNER JOIN v_GS_SoftwareFile

ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)

WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe')

ORDER by Netbios_Name0