如何使用sql为同一数据库中的每个表选择前10条记录

Jac*_*ack 6 sql-server-2008

我在一个数据库中有 50 多个表。

我不想在数据库中的每个表上使用以下 SQL。

select * from {table_name}
Run Code Online (Sandbox Code Playgroud)

那么,是否可以使用 sql 显示同一数据库中每个表的前 10 条记录?

Aar*_*and 9

我会小心使用sp_MSforeachtable,因为它使用与sp_MSforeachdb. 我已经指出了sp_MSforeachdb here(向后工作)的问题,并被告知它不会在 Connect 上修复(在他们杀死它之前,因此此链接不再有效)here

相反,我会做这样的事情(其中还包括输出中的表名,可能有用):

DECLARE @sql nvarchar(max) = N'';

SELECT @sql += N'

SELECT TOP (10) [table] = N''' + REPLACE(name, '''','') + ''', * 
    FROM ' + QUOTENAME(SCHEMA_NAME([schema_id]))
  + '.' + QUOTENAME(name) + ';'
FROM sys.tables AS t;

PRINT @sql;
-- EXEC sys.sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)

当您对PRINT输出感到满意时(请注意,它将在 8K 处截断),取消注释EXEC.


Mar*_*shi 5

使用 sp_MSforeachtable

EXEC sp_MSforeachtable 'select top(10) * from ?'
Run Code Online (Sandbox Code Playgroud)

要显示表名称,您应该像这样更改它:

EXEC sp_MSforeachtable 'select "?" as table_Name , * from ?'
Run Code Online (Sandbox Code Playgroud)

  • @Jack 在这里的主要想法是学习和教授最佳解决方案,所以我总是很高兴知道有比我更好的解决方案。 (2认同)