首页 > 解决方案 > 打印出表名和列名时获取表中的第一行

问题描述

我需要快速查看 MS SQL 数据集中的数据,并找到以下代码,除了我需要的最后一列之外,它提供了所有内容。第三列应显示第一行的数据。

SELECT TABLE_NAME, COLUMN_NAME  FROM INFORMATION_SCHEMA.COLUMNS

在此处输入图像描述

所以我的问题是我应该如何制定 SQL 查询以获取包含第一行数据的第三列)?

//更新 这段代码给了我我想要的一切,除了数据来自哪个表。(在 Yaroslav 在Select the first 3 rows of each table in a database 中回答的类似问题中)

DECLARE @sql VARCHAR(MAX)=''; 
SELECT @sql=@sql+'SELECT TOP 3 * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
FROM sys.tables
EXEC(@sql)

标签: sql-servertsql

解决方案


如果我理解正确,一种方法是未记录的存储过程sp_MsForeachTable。问号是表格名称的占位符:

提示:编辑“YourDataBase”...

EXEC sp_msforeachtable 'USE YourDataBase;SELECT TOP 1 ''?'' AS TableName, * FROM ?';

使用此查询,您可以轻松浏览所有第一行

CREATE TABLE #test(TableName NVARCHAR(MAX),Content XML)

EXEC sp_msforeachtable 
'USE YourDataBase;INSERT INTO #test SELECT ''?'' AS TableName, (SELECT TOP 1 * FROM ? FOR XML PATH(''row''))';

SELECT * FROM #test;

更新

您自己的代码也会返回表的名称。尝试这个

DECLARE @sql VARCHAR(MAX)=''; 
SELECT @sql=@sql+'SELECT TOP 3 ''' + t.[name] + ''' AS TableName, * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
FROM sys.tables t
EXEC(@sql)

推荐阅读