sp_MSforeachtable 排序依据
我正在使用 sp_MSforeachtable 来获取数据库中特定表的行计数。我想要这些按名字排序。
如何向 sp_MSforeachtable
添加 ORDER BY
子句?
I am using sp_MSforeachtable
to get a rowcount of specific tables in my database. I want these ordered by name.
How do I add an ORDER BY
clause to sp_MSforeachtable
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
EXEC sp_MSforeachtable @SQL, @whereand = 'ORDER BY 1'
EXEC sp_MSforeachtable @SQL, @whereand = 'ORDER BY 1'
通过此链接: http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com: 80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html
这将返回正确的计数,其中使用元数据表的方法只会回报估计。
创建此过程(与链接略有不同):
from this link: http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html
This will return correct counts, where methods using the meta data tables will only return estimates.
create this procedure (slightly different than from link):
您不需要 :-)
只需使用此 SQL 脚本即可 - 更易于使用且更易于配置 - 您可以根据需要进行排序!
马克
You don't :-)
Just use this SQL script instead - much easier to use and much more configurable - you can sort as you wish!
Marc
我知道这个问题已经有 10 多年的历史了,但它有超过 3000 次访问和一堆错误的答案。我将重新调整 Chris R. 的答案,希望将其标记为已接受的答案,而不是过于复杂的半页 SQL 或“你不能”的答案。我带着完全相同的问题来到这里,所以它仍然相关,而且显然并不简单。
使用 @whereand 参数指定 ORDER BY 子句,该参数的内容通过以下方式附加到内部 SELECT 语句的末尾存储过程中的简单
+ @whereand
。在ORDER BY 1
中使用1
表示按第一列排序。I understand this question is over 10 years old, but it has over 3000 visits and a bunch of wrong answers. I'm going to repurpose Chris R.'s answer in hopes of getting this marked as the accepted answer, instead of overly-complicated half-pages of SQL or "you can't" answers. I came here with the exact same question so it's still relevant and obviously not simple.
Use the
@whereand
parameter to specify anORDER BY
clause, The contents of that parameter are tacked on to the end of the internalSELECT
statement via a simple+ @whereand
in the stored proc. And using1
inORDER BY 1
means to order by the first column.一种方法是创建一个临时表,然后插入/执行其中。然后在临时表上执行选择/排序。
One way is to create a temp table, then insert / execute in to it. Then do a select / order by on the temp table.
其中任何一个都应该可以做到;
EXEC sp_MSforeachtable @command1 = "SELECT count(*) as '?' FROM ? ", @whereand = 'ORDER BY 1'
EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?', @whereand = 'ORDER BY 1'
感谢 Chris_R 的“@whereand = 'ORDER BY” 1'" - 我会投票,但没有代表这样做。
Either of these should do it;
EXEC sp_MSforeachtable @command1 = "SELECT count(*) as '?' FROM ? ", @whereand = 'ORDER BY 1'
EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?', @whereand = 'ORDER BY 1'
Kudos to Chris_R for the "@whereand = 'ORDER BY 1'" - I would upvote but do not have the rep to do so.