WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。 Sql Server使用TOP和许多其他RDBMS支持LIMIT等。
有没有变通的方法来模拟SELECT查询,使其表现为好像它具有将结果集限制为任意数字的TOP/LIMIT子句?
还是还有其他一些特定于WQL的关键字可以像TOP或LIMIT一样工作?
最佳答案
不,没有办法单独使用WQL模拟TOP。
异常(exception):如果您有幸查询一个未断开的WMI类,并且将数字实例号用作键,则可以使用大于和小于的比较来限制和分页结果。
一旦收集了足够多的实例,ManagementClass.GetInstances()而不是使用WQL查询可能允许您在中途取消枚举,从而避免了一次枚举整个列表所需的CPU和RAM开销。
请注意,CIMV2 WMI提供程序AFAIK本身并不处理WQL,而是仅依靠WMI枚举所有实例,处理WQL并过滤结果,然后再将其返回给调用方。但是昂贵的部分(实际上是获取底层的WMI数据)仍然可以完成。因此,我相信使用WQL与使用GetInstances()并自行过滤结果(对于本地WMI查询)并不会提高效率;如果GetInstances()允许您中途取消,则可以使用GetInstances()对于长结果集,可能要便宜得多。
关于sql - WQL不支持TOP-需要解决方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1574336/