Dotaz
Na této stránce zadejte SQL dotaz.
Špatně definovaný SQL dotaz může nevratně poškodit databázi Alvao. Dotazy SQL vždy vytvářejte a testujte na testovací kopii produkční databáze.
Možnosti:
- Panel příkazů
- Uložit - ukládá změny.
- Výbor - spustí SQL dotaz a zobrazí náhledy na výsledky.
- Editor dotazů - zadejte SQL dotaz.
V dotazu SQL můžete použít následující proměnné:
- @personId - ID uživatele (tPerson .iPersonId) provádějící datový dotaz.
- @localeId - LCID (tLocale .iLocaleId) preferovaného jazyka uživatele provádějícího datový dotaz.
- @customId - hodnota customId parametru dotazu. Tato proměnnou můžete použít v přizpůsobeních, např. IEntityTab. Například URL dotazu na data může vypadat takto: https://contoso.onalvao.com/Alvao/DataQuery/výsledek?id=1&customId=1.
Na stránce Datové dotazy mohou uživatelé zobrazit všechny sloupce vrácené SQL dotazem. If the column name ends with "TicketId", "NodeId", "SoftwareLicenseId", or "PersonId" (e,q. "MentorPersonId") nebo odkaz URL (s protokolem), hodnoty se zobrazí jako odkazy na odpovídající stránku entity. Pokud je vybrán celý řádek, zobrazí se vpravo stránka entity pro první takový sloupec.
Příklady dotazu
Dotaz musí obsahovat přesně jednu klauzuli SELECT s jedinečnými názvy sloupců. Klauzule ORDER BY a WITH nejsou povoleny.
Diskové jednotky a volné místo
Seznam všech diskových jednotek počítače a stav volného místa.
SELECT
n.txtName AS 'Object name',
wo.Prop_Name [Logical drive],
round(wo.Prop_Size/1073741824,2) [Capacity (GB)],
round(wo.FreeSpace/1073741824,2) [Total free space (GB)],
round(wo.FreeSpace/wo.Prop_Size*100,2) [Free space (%)]
FROM (
SELECT vn.*
FROM vComputer vn
LEFT JOIN vPersonNodeRight_Read AS r ON r.liNodeId=vn.intNodeId AND r.liPersonId=@personId
WHERE ((SELECT CASE WHEN EXISTS(
SELECT TOP 1 1 FROM tRolePerson AS RP
LEFT JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId = @personId AND R.RoleBehaviorId=8
) THEN 1 ELSE 0 END)= 1
OR
((SELECT CASE WHEN EXISTS(
SELECT TOP 1 1 FROM tRolePerson AS RP
LEFT JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId = @personId AND R.RoleBehaviorId IN (10,11,12,13,14,15)
)
OR EXISTS(SELECT TOP 1 NodeId FROM vLicRight_Read WHERE PersonId = @personId)
THEN 1 ELSE 0 END) = 1
AND ((SELECT bolNode_Rights FROM tblSystemSetting) = 0 OR r.liNodeId IS NOT NULL)))
AND vn.IsActive = 1
) n
join tblDict ck on ck.lintClassId=n.lintClassId
left join vComputerDetectLast cdl on cdl.lintComputerNodeId=n.intNodeId and cdl.lintDetectKindId=1
left join tblDetect d on d.intDetectId=cdl.lintDetectId
left join tblWbemObject wo on wo.lintDetectId=cdl.lintDetectId and wo.__CLASS='Win32_LogicalDisk' and wo.DriveType=3
left join tblWbemObject wobl on wobl.lintDetectId=cdl.lintDetectId and wobl.__CLASS='Win32_EncryptableVolume' and wo.DeviceID = wobl.DriveLetter
left join tblWbemObject won on won.lintDetectId=cdl.lintDetectId and won.__CLASS='Win32_ComputerSystem'
WHERE n.lintClassId IN (SELECT intClassId FROM tblClass WHERE bComputer=1)
and won.Prop_Name=n.txtComputerName
Kompatibilita se systémem Windows 11
Stáhněte si skript na adrese compatibility.sql a zkontrolujte, které počítače jsou v registru kompatibilní se systémem Windows 11.
Uživatelé s přeneseným majetkem bez předávacího protokolu
Tento dotaz zobrazuje uživatele, kterým byl předán majetek s vyplněným inventárním číslem, ale následně nebyl vystaven předávací protokol.
SELECT
usr.txtName [User],
usr.txtPath AS [Path in tree],
dbo.fnLocalTime(moves.[Date of last move (UTC)], 'Central Europe Standard Time') [Date last moved],
dbo.fnLocalTime(pp.[Last PP Date (UTC)], 'Central Europe Standard Time') [Date of last PP]
FROM (
SELECT
usr.intNodeId [User Id],
max(l.dteDateTime) [Date of last move (UTC)]
FROM tblHistory as l
INNER JOIN vPropertyKind_InventoryNumber PIN ON PIN.lintNodeId = l.lintNodeId AND ISNULL(PIN.txtValue,'')!=''
INNER JOIN tblNodeParent np ON np.lintNodeId=l.lintNodeId and np.lintNodeId <> np.lintParentNodeId
INNER JOIN tblNode usr ON usr.intNodeId = np.lintParentNodeId
INNER JOIN NodeCust ncUsr ON ncUsr.NodeId = usr.intNodeId AND ncUsr.[User] IS NOT NULL
INNER JOIN tblKind K ON K.intKindCode = 5
INNER JOIN ClassKind CK ON CK.ClassId = usr.lintClassId AND CK.KindId = K.intKindId
WHERE l.intFlags=768
GROUP BY usr.intNodeId
) moves
INNER JOIN tblNode usr ON usr.intNodeId = moves.[User Id]
INNER JOIN NodeCust ncUsr ON ncUsr.NodeId = usr.intNodeId AND ncUsr.[User] IS NOT NULL
LEFT JOIN (
select
ISNULL(max(D.IssuedDate),{d'1900-01-01'}) [Last PP Date (UTC)],
ND.lintNodeId
FROM vDocument as D
inner join NodeDocument as ND on ND.AMDocumentId=D.id
WHERE D.lintDocumentKindId = 2 and D.dteRemoved is null
GROUP BY ND.lintNodeId
) pp ON pp.lintNodeId = moves.[User Id]
LEFT JOIN (
SELECT TOP 1 1 Have
FROM tRolePerson AS RP
JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId=@personId
AND R.RoleBehaviorId in (8,10,11,12,13,14,15)
) HaveAnyAmRole ON HaveAnyAmRole.Have = 1
LEFT JOIN (
SELECT TOP 1 1 IsAdmin
FROM tRolePerson AS RP
JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId=@personId AND R.RoleBehaviorId=8
) AmAdmin ON AmAdmin.IsAdmin = 1
WHERE moves.[Date of last move (UTC)]>DATEADD(DAY,1,pp.[Last PP Date (UTC)])
and case
when AmAdmin.IsAdmin is not null then 1
when HaveAnyAmRole.Have is not null
and exists(select 1 from tblSystemSetting where bolNode_Rights=0)
then 1
when HaveAnyAmRole.Have is not null
and exists(select 1 from vPersonNodeRight_Read r where r.liPersonId=@personId and r.liNodeId=usr.intNodeId)
then 1
else 0
end = 1
Poznámka: V předávacím protokolu je uvedeno pouze datum (a čas je vždy 00:00:00), takže k němu musíme přidat den.
Počítače a jejich naskenované čipy TPM
Dotaz zobrazí seznam počítačů a jejich naskenovaných čipů TPM.
SELECT
o.intNodeId NodeId,
nc.[Type],
o.txtName [Computer],
o.txtPath,
wo.IsActivated,
wo.IsEnabled,
wo.IsOwned,
wo.Manufacturer,
wo.ManufacturerVersion,
wo.ManufacturerVersionFull20,
wo.ManufacturerVersionInfo,
wo.PhysicalPresenceVersionInfo,
wo.SpecVersion
FROM tblNode o
join tblClass c on c.intClassId=o.lintClassId
LEFT JOIN NodeCust nc ON o.intNodeId = nc.NodeId
LEFT JOIN vComputerDetectLast cdl ON cdl.lintComputerNodeId=o.intNodeId AND cdl.lintDetectKindId=1
LEFT JOIN tblWbemObject wo ON wo.lintDetectId=cdl.lintDetectId AND wo.__CLASS='Win32_Tpm'
LEFT JOIN (
SELECT TOP 1 1 Have
FROM tRolePerson AS RP
JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId=@personId
AND R.RoleBehaviorId in (8,10,11,12,13,14,15)
) HaveAnyAmRole ON HaveAnyAmRole.Have = 1
LEFT JOIN (
SELECT TOP 1 1 IsAdmin
FROM tRolePerson AS RP
JOIN tRole AS R ON RP.liRolePersonRoleId=R.iRoleId
WHERE RP.liRolePersonPersonId=@personId AND R.RoleBehaviorId=8
) AmAdmin ON AmAdmin.IsAdmin = 1
WHERE c.bComputer=1
AND o.IsActive = 1
and case
when AmAdmin.IsAdmin is not null then 1
when HaveAnyAmRole.Have is not null
and exists(select 1 from tblSystemSetting where bolNode_Rights=0)
then 1
when HaveAnyAmRole.Have is not null
and exists(select 1 from vPersonNodeRight_Read r where r.liPersonId=@personId and r.liNodeId=o.intNodeId)
then 1
else 0
end = 1