我在一个数据库中有 50 多个表。
我不想在数据库中的每个表上使用以下 SQL。
select * from {table_name}
Run Code Online (Sandbox Code Playgroud)
那么,是否可以使用 sql 显示同一数据库中每个表的前 10 条记录?
我会小心使用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
.
使用 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)