Skip Navigation LinksALVAO 10.4ALVAO Asset ManagementImplementace systému v organizaciVlastní úpravy a rozšířeníSQL dotazy Skip Navigation Links.


SQL dotazy

Obecné rady

  1. Při vytváření SQL dotazů doporučujeme používat pohledy vytvořené pro snadnější přístup k datům v Asset Managementu. Všechny pohledy určené pro přístup k informacím z AM jsou v databázovém schématu "Query".
  2. SQL dotazy umožňují spouštět pouze SELECT dotazy.
  3. Názvy vlastních sloupců zadávejte vždy ve tvaru Pohled.[Sloupec], například Node.[Sériové číslo]. Sloupce můžete přejmenovat pomocí příkazu AS, například SELECT Pohled.[Sloupec] AS [Pohled Sloupec].
  4. Nepoužívejte v dotazech SELECT * FROM, ale vždy vyjmenujte konkrétní sloupce, jinak může být zobrazení výsledku zpomaleno.
  5. Pohledy, které obsahují vlastnosti objektů, obsahují vždy 100 nejpoužívanějších vlastností objektů. Aktualizaci těchto pohledů (novou definici pro 100 nejpoužívanějších vlastností) lze provést v ALVAO WebApp - Správa - Údržba databáze - Aktualizovat data pro reporty
  6. Před vytvořením vlastních dotazů nad pohledy doporučujeme podívat se na níže popsané ukázky použití pohledů.

Ukázky SQL dotazů

Níže uvádíme některé základní SQL dotazy na zjištění dat o objektech.

Zobrazení všech počítačů v aktivní evidenci s podrobnými informacemi

V následujícím dotazu se zjistí podrobnosti o všech počítačích.

SELECT [Název objektu], [Velikost paměti RAM (GB)], [Celková kapacita pevných disků (GB)], [Procesor], [Operační systém], [Grafická karta], [IP adresy], [MAC adresy]
FROM Query.ObjectCsy
WHERE [Objekt typu počítač] = 'Ano'

Zobrazení všech počítačů v aktivní evidenci s nainstalovaným AcrobatReader

Zde spojíme hodnoty z více pohledů do jednoho pomocí operátoru LEFT JOIN.
SELECT ObjectCsy.[Název objektu], Software.Product FROM Query.ObjectCsy
LEFT JOIN Query.Software ON [Software].ComputerNodeId = ObjectCsy.[Id objektu]
WHERE Software.Product = 'Adobe Acrobat Reader'

Zobrazení všech objektů počítačů a jejich historie přesunu

Dotaz na objekty počítačů a některé vybrané položky jejich historie.
SELECT ObjectCsy.[Název objektu], ObjectLogCsy.[Datum záznamu (UTC)], ObjectLogCsy.[Nadpis], ObjectLogCsy.[Zpráva]
FROM Query.ObjectCsy
LEFT JOIN Query.ObjectLogCsy ON ObjectLogCsy.[Id objektu] = ObjectCsy.[Id objektu]
WHERE [Objekt typu počítač] = 'Ano' AND ObjectLogCsy.[Nadpis] = N'Přesun' AND ObjectLogCsy.[Druh záznamu] = 'Historie objektů'

Diskové jednotky a volné místo na nich

Dotaz na diskové jednotky počítačů a stav volného místa na nich.

SELECT o.[Název objektu], d.[Logický disk], d.[Kapacita (GB)], d.[Volné místo (GB)], d.[Volné místo (%)]
FROM Query.DiskDriveCsy d
LEFT JOIN [Query].[ObjectCsy] o ON d.[Id objektu]=o.[Id objektu]

Uživatelé s přesunutým majetkem bez předávacího protokolu

Dotaz zobrazí uživatele, kterým byl přesunut majetek s vyplněným inventárním číslem, ale následně nebyl vystaven předávací protokol.

SELECT
  usr.[Název objektu] [Uživatel],
  usr.[Cesta ve stromu],
  dbo.fnLocalTime(presuny.[Datum posledního přesunu (UTC)],'Central Europe Standard Time') [Datum posledního přesunu],
  dbo.fnLocalTime(pp.[Datum posledního PP (UTC)],'Central Europe Standard Time') [Datum posledního PP]
FROM (
    SELECT
      usr.[Id objektu] [ID uživatele],
      max(l.[Datum záznamu (UTC)]) [Datum posledního přesunu (UTC)]
    FROM Query.ObjectLogCsy l
      INNER JOIN Query.ObjectCsy o ON o.[Id objektu]=l.[Id objektu] AND ISNULL(o.[Inventární číslo],'')!=''
      INNER JOIN Query.NodeParent np ON np.ChildNodeId=l.[Id objektu]
      INNER JOIN Query.ObjectCsy usr ON usr.[Id objektu]=np.ParentNodeId AND usr.[Druh objektu]=N'Uživatel'
    WHERE l.Nadpis=N'Přesun'
    GROUP BY usr.[Id objektu]
  ) presuny
  INNER JOIN Query.ObjectCsy usr ON usr.[Id objektu]=presuny.[ID uživatele]
  LEFT JOIN (
    SELECT
      l.[Id objektu],
      ISNULL(max(l.[Datum záznamu (UTC)]),{d'1900-01-01'}) [Datum posledního PP (UTC)]
    FROM Query.ObjectLogCsy l
    WHERE l.[Druh záznamu]=N'Dokument' AND l.Nadpis=N'Předávací protokol'
    GROUP BY l.[Id objektu]
  ) pp ON pp.[Id objektu]=presuny.[ID uživatele]
WHERE presuny.[Datum posledního přesunu (UTC)]>DATEADD(DAY,1,pp.[Datum posledního PP (UTC)])

Pozn.: Předávací protokol má v deníku pouze datum (a čas je vždy 00:00:00), proto u něj musíme přidat jeden den.

Převod dotazovacího jazyka do SQL – Zobrazení všech objektů uživatelů, jejich počítačů typu desktop a celkový počet monitorů u nich

Ukážeme si zde, jak lze přepsat dotaz v dotazovacím jazyce do SQL.
Původní dotaz:
SELECT AS "Uživatel"=[Uživatel] [Uživatel].@Node,[Počítač].[Druh počítače],[Počítač].@Node,[Monitor].@Node COUNT 
WHERE @Class='Uživatel' 
WITH 
   SELECT AS [Počítač]  WHERE @Class='Počítač'  AND ([Druh počítače] = "desktop"),
   SELECT AS [Monitor]  WHERE @Class='Monitor' 
ENDWITH
Tento dotaz nám zobrazí objekty uživatelů, jejich počítače typu desktop a monitory. Také nám zobrazí celkový počet monitorů pod všemi uživateli (bez ohledu na typ počítače). Při převod do SQL budeme postupovat tak, že si napřed najdeme všechny nesmazané objekty typu Uživatel a jejich podobjekty typu Počítač.

SELECT [User].[Název objektu] AS [User NodeName], Node.[Název objektu] AS [Computer Name] FROM [Query].[ObjectCsy] [User]
LEFT JOIN [Query].NodeParent ON [User].[Id objektu] = NodeParent.ParentNodeId
LEFT JOIN [Query].[ObjectCsy] [Node] ON NodeParent.ChildNodeId = Node.[Id objektu]
WHERE [User].[Druh objektu] = N'Uživatel' AND (Node.[Druh objektu] = N'Počítač/desktop' OR Node.[Druh objektu] = N'Monitor')
Poznámka:
Na rozdíl od původního dotazu v dotazovacím jazyce neobsahuje výsledný SQL dotaz celkový počet monitorů. Tuto hodnotu je potřeba zjistit v samostatném dotazu.

Převod standardních EPQ dotazů

Následující SQL dotazy zobrazují stejná data, jako standardní EPQ soubory.

Inventář podle místností

Objekty s vlastností inventárním číslem, seskupené dle vlastnosti Místnost a řazené dle názvu v síti a třídy.
SELECT
  [Název objektu] ,
  [Druh objektu],
  [Inventární číslo],
  [Místnost],
  [Uživatel],
  [Název v síti] 
FROM Query.ObjectCsy 
WHERE [Inventární číslo] IS NOT NULL

Pozn.: Výsledek dotazu si pak v tabulce seřaďte dle sloupce "Místnost".

Inventář podle uživatelů

Objekty s vlastností inventárním číslem, seskupené dle vlastnosti Uživatel.
SELECT
  [Název objektu] ,
  [Druh objektu],
  [Inventární číslo],
  [Místnost],
  [Uživatel],
  [Název v síti] 
FROM Query.ObjectCsy 
WHERE [Inventární číslo] IS NOT NULL

Pozn.: Výsledek dotazu si pak v tabulce seřaďte dle sloupce "Uživatel".

Nainstalovaný software podle software

Nainstalovaný software, seskupený dle počítačů.
SELECT c.[Název objektu] AS [Počítač], Product AS [Aplikace], 
Installed, LicenseInventoryNumber AS [Inventární číslo počítače], 
u.[Název objektu] AS [Uživatel], LicenseInvoiceNumber AS [Číslo dokumentu licence],
LicenceName AS [Název licence] FROM Query.Software
LEFT JOIN Query.ObjectCsy c ON c.[Id objektu] = Software.ComputerNodeId 
LEFT JOIN Query.ObjectCsy u ON u.[Id objektu] = Software.[User] 
WHERE Product like N'ALVAO%'

Operační systémy

Nainstalované OS, seskupené dle počítačů.
SELECT Computer.NodeName AS [Počítač], Product AS [OS], Installed AS [Datum instalace],
Computer.[Inventární číslo] AS [Inventární číslo], [Computer].UserNodeId AS [Uživatel], LicenseInvoiceNumber AS [Dokument],
LicenceName AS [Přidělená licence], LicenseActivationKey AS [OS - sériové číslo] 
FROM Query.Software 
LEFT JOIN Query.Computer ON Computer.NodeId = Software.ComputerNodeId WHERE Category = 1

Počítače

Počítače, jejich podobjekty a vlastnosti.
SELECT [Název objektu], [Název v síti], [Uživatel], [Datum nákupu], [Inventární číslo], [Sériové číslo],
[Záruka do], [Celková kapacita pevných disků (GB)] AS [HDD], [Procesor], [Operační systém] 
FROM Query.ObjectCsy
WHERE [Objekt typu počítač] = 'Ano'

Přehled zásahů podle data

Seznam událostí v deníku od zadaných parametrů. Seskupení dle objektů.
SELECT [Název objektu], [Druh objektu], [Datum záznamu (UTC)], [Nadpis], [Zpráva]
FROM [Query].[ObjectLogCsy]
LEFT JOIN [Query].[ObjectCsy] ON [ObjectCsy].[Id objektu] = [ObjectLogCsy].[Id objektu]

Přesuny objektů podle data

Seznam událostí přesunů v deníku. Seskupení dle data.
SELECT [Název objektu], [Druh objektu], [Datum záznamu (UTC)], [Nadpis], [Zpráva]
FROM [Query].[ObjectLogCsy]
LEFT JOIN [Query].[ObjectCsy] ON [ObjectCsy].[Id objektu] = [ObjectLogCsy].[Id objektu]
WHERE ObjectLogCsy.[Nadpis] = N'Přesun' AND ObjectLogCsy.[Druh záznamu] = 'Historie objektů'

Zařízení podle data nákupu

Seznam objektů dle data nákupu.
SELECT [Název objektu],
CONVERT(datetime,[Datum nákupu]) AS [Datum], [Místnost], [Uživatel] FROM 
Query.ObjectCsy

Zařízení podle záruky

Seznam objektů dle jejich záruky (vlastnost).
SELECT [Název objektu], CONVERT(datetime,[Datum nákupu]) AS [Datum],
[Místnost], [Uživatel],[Záruka do]
FROM Query.ObjectCsy

SQL dotazy pro Audit změn oprávnění uživatelů

Protokol nastavení oprávnění ve stromu objektů za minulý měsíc.
SELECT * FROM Query.NodeRightLog
WHERE DatePart("m", [TimeStamp]) = DatePart("m", DateAdd("m", -1, GETUTCDATE()))
  AND DatePart("yy", [TimeStamp]) = DatePart("yy", DateAdd("m", -1, GETUTCDATE()))
Protokol nastavení členství ve skupinách za minulý měsíc.
SELECT * FROM Query.RoleMembershipLog
WHERE DatePart("m", [TimeStamp]) = DatePart("m", DateAdd("m", -1, GETUTCDATE()))
  AND DatePart("yy", [TimeStamp]) = DatePart("yy", DateAdd("m", -1, GETUTCDATE()))
Protokol přihlašování uživatelů za minulý měsíc.
SELECT * FROM Query.UserLogonLog
WHERE DatePart("m", [TimeStamp]) = DatePart("m", DateAdd("m", -1, GETUTCDATE()))
  AND DatePart("yy", [TimeStamp]) = DatePart("yy", DateAdd("m", -1, GETUTCDATE()))

 

Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.