Pregunta

WQL (básicamente SQL para WMI) no admite un TOP o límite de palabras clave. SQL Server utiliza TOP y muchos otros LÍMITE RDBMS supprt etc.

¿Hay una solución alternativa para la emulación de una consulta SELECT a comportarse como si tuviera una cláusula TOP / carrera que limita el conjunto de resultados a un número arbitrario?

O hay alguna otra palabra clave WQL-específica que funciona como TOP o límite?

¿Fue útil?

Solución

No, no hay manera de simular TOP utilizando WQL solo.

Excepción: si tienes la suerte de estar consultando una clase WMI que tiene sin huecos, ascendiendo números de instancia numéricos utilizados como claves, entonces se puede utilizar comparaciones mayores-que y menor luego de limitar y la página a través de los resultados.

Es posible que ManagementClass.GetInstances () en lugar de utilizar una consulta WQL puede permitirle cancelar la mitad de la enumeración, una vez que haya recogido suficientes casos, y por lo tanto evitar pagar el costo de la CPU y la memoria RAM de enumerar la lista completa de una vez.

Tenga en cuenta que, que yo sepa, el proveedor CIMV2 WMI no nativa manejar WQL-- en cambio, simplemente se basa en WMI para enumerar todos los casos, procesar la WQL, y filtrar los resultados antes de devolverlos a la persona que llama. Pero la parte más costosa (en realidad ir a buscar los datos WMI subyacente) se sigue haciendo. Así que yo creo que no hay aumento de la eficiencia que se tenía (para consultas locales WMI, que es) mediante el uso vs WQL usando GetInstances () y filtrar los resultados y si yourself-- GetInstances () le permite cancelar a mitad de camino, a continuación, GetInstances () puede ser mucho más barato para los conjuntos de resultados de largo.

Otros consejos

tubería con "seleccione XYZ -Primer 1"

Por ejemplo: Get-WmiObject Win32_LogicalDisk | -En primer lugar seleccione 1

Al igual que Justin ha dicho. No estoy seguro acerca de sus necesidades exactas sin embargo. Yo estaba haciendo un proyecto sencillo con Visual Basic y parte de ella fue a buscar registro de eventos, la vista de lista falla debido a la enorme tamaño del registro de la aplicación (> 20 MB) y el control entra en una especie de bucle infinito. Quería límite de lo que aquí está el pseudocódigo

topval = UserInputText.Text 'Assuming user entered the top 10 or 20

while ThereAreStillItemsInCollection
 if topval = 0 then
 goto CleanUpMemObjectsAndReturn
 end if
topval = topval  - 1
wend
CleanUpMemObjectsAndReturn:
set obj = Nothing
end sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top