WQL不支持TOP - 需要的解决方法(WQL does not support TOP - ne

2019-08-18 13:40发布

WQL(主要为SQL WMI)不支持TOP或LIMIT关键字。 SQL Server使用的TOP和许多其它RDBMS supprt LIMIT等。

有没有一种解决方法,以模拟一个SELECT查询的行为就好像它有限制的结果设置为某个任意数目的TOP /限制条款?

或者是有工作方式类似于TOP或限制某些其他特定WQL关键字?

Answer 1:

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

例外:如果你足够幸运地查询已经无间隙,提升用作键的数字实例号WMI类,那么你可以通过效果,请使用大于和小于,然后比较,以限制和页面。

这有可能是ManagementClass.GetInstances()而不是使用一个WQL查询可能会允许你一旦你收集到足够的情况下,取消中途枚举,从而避免支付一次枚举整个列表的CPU和RAM成本。

需要注意的是,据我所知,在CIMV2 WMI提供程序本身不处理WQL--,而不是简单地依赖于WMI枚举所有情况下,处理WQL,并将其返回给调用方之前结果进行过滤。 但昂贵的部分(实际上获取底层WMI数据)仍然完成。 所以我相信没有被有效率增益(本地WMI查询,这是)通过使用WQL对使用GetInstances()和过滤结果yourself--如果GetInstances()允许您取消中途,然后GetInstances()可能是长期的结果集便宜得多。



Answer 2:

与“选择XYZ - 第一1”管它

如:获取WmiObject可以的Win32_LogicalDisk |选择 - 第一1



Answer 3:

像贾斯汀说。 我不知道,虽然您的具体要求。 我是做用Visual Basic一个简单的项目,一部分是获取事件日志,列表视图失败,因为应用程序日志(> 20MB)的庞大规模和控制进入某种无限循环的。 我想限制所以这里是伪代码

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


文章来源: WQL does not support TOP - need workaround