WQL不支持TOP-需要解决方法

Pau*_*sik 5 sql wmi wmi-query wql

WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。Sql Server使用TOP和许多其他RDBMS支持LIMIT等。

有没有变通方法来模拟SELECT查询,使其表现得好像具有将结果集限制为任意数字的TOP / LIMIT子句?

还是还有其他一些特定于WQL的关键字可以像TOP或LIMIT一样工作?

Jus*_*ant 4

不,没有办法单独使用 WQL 来模拟 TOP。

例外:如果您足够幸运,能够查询一个 WMI 类,该类使用无间隙的升序数字实例编号作为键,那么您可以使用大于和小于比较来限制和分页结果。

ManagementClass.GetInstances()可能允许您在收集了足够的实例后中途取消枚举,而不是使用 WQL 查询,从而避免支付一次枚举整个列表的 CPU 和 RAM 成本。

请注意,据我所知,CIMV2 WMI 提供程序本身并不处理 WQL,而是仅依赖 WMI 枚举所有实例、处理 WQL 并在将结果返回给调用者之前过滤结果。但昂贵的部分(实际上获取底层 WMI 数据)仍然完成。因此,我认为使用 WQL 与使用 GetInstances() 并自行过滤结果相比,不会获得任何效率提升(对于本地 WMI 查询而言)——如果 GetInstances() 允许您中途取消,则 GetInstances()对于长结果集可能要便宜得多。