WQL不支持TOP - 需要解决方法
WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。 Sql Server使用TOP和许多其他RDBMSs支持LIMIT等。WQL不支持TOP - 需要解决方法
是否有解决方法来模拟SELECT查询的行为,就好像它有一个将结果集限制为某个任意数的TOP/LIMIT子句?
或者还有其他一些WQL特定的关键字,像TOP或LIMIT一样工作吗?
不,不可以单独使用WQL模拟TOP。
例外:如果您足够幸运地查询WMI类未使用的数字实例编号作为键,那么您可以使用大于或小于此值的比较来限制和翻页结果。
可能ManagementClass.GetInstances()而不是使用WQL查询可能允许您在收集足够的实例时中途取消枚举,从而避免支付一次列举整个列表的CPU和RAM成本。
请注意,AFAIK,CIMV2 WMI提供程序本身不处理WQL--而只是依靠WMI来枚举所有实例,处理WQL并在将结果返回给调用方之前过滤结果。但是昂贵的部分(实际上获取底层WMI数据)仍然完成。所以我相信,通过使用WQL与使用GetInstances()并自己过滤结果,对于本地WMI查询(即本地WMI查询)没有效率增益 - 如果GetInstances()允许您中途取消,则GetInstances()对于较长的结果集可能要便宜得多。
我发现这个:http://stackoverflow.com/questions/595123/is-there-an-ansi-sql-alternative-to-the-mysql-limit-keyword 任何机会WQL支持从答案中选择那些“TOP”语法替代方案之一? – 2009-10-15 20:10:12
不是。 WQL不支持此功能。 – 2009-10-15 20:22:13
管将其与 “选择XYZ - 第一1”
如:获取WmiObject可以的Win32_LogicalDisk |选择 - 第一1
这是这里最没用的评论。您的WQL查询仍会检索所有对象并将其保存在内存中,但只有First 1(在您的示例中)显示在屏幕上。这并不妨碍所有对象被检索。事实上,如果您有一个返回1000个对象的WQL查询,并且每个对象需要1秒,那么一个'Select-Object -First 10'会在前10秒内每秒输出1个对象,然后该命令会继续执行另一个对象990秒,绝对没有反馈给用户! – cogumel0 2014-10-01 09:48:21
像贾斯汀说。我不确定你的具体要求。我用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
你打算如何使用TOP?大多数时候,这是使用MAX/MIN值比较的问题... – 2009-10-15 19:02:26
@rexem:任意。举例来说,假设有一个日期时间列,并且您想查看最近10次事件。有没有使用MIN/MAX来模拟TOP的方法? – 2009-10-15 19:16:23
MAX&rank/rownum ... – 2009-10-16 05:15:48