在打印出表名和列名的同时获取表中的第一行

时间:2018-06-28 13:37:22

标签: sql-server tsql

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

SELECT TABLE_NAME, COLUMN_NAME  FROM INFORMATION_SCHEMA.COLUMNS

enter image description here

所以我的问题是我应该如何制定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)

2 个答案:

答案 0 :(得分:1)

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

提示:编辑“您的数据库” ...

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)

答案 1 :(得分:0)

我知道这不是很多,但是它为您构建了一条select语句,然后您可以循环执行每个语句exec每个语句或编写一个并集,但是我想这可能是一个很好的起点

编辑:您还可以编写一个循环并执行循环中的每个语句,将值插入最终表中,然后从该表中进行选择就可以了。

SELECT
    t.String
   ,t.q
   ,t.TABLE_NAME
   ,t.q2
   ,t.tbname
   ,t.com2
   ,t.q4
   ,t.COLUMN_NAME
   ,t.q5
   ,t.Columnname
   ,t.com3
   ,t.ColName
   ,t.[From]
   ,t.FromSelect
FROM (SELECT
        'Select top 1 ' AS String
       ,'''' q
       ,TABLE_NAME
       ,'''' q2
       ,'as TableName'
        as tbname
       ,',' com2

       ,'''' q4
       ,COLUMN_NAME
       ,'''' q5
       ,'as COLUMN_NAME'
       as Columnname
       ,',' com3
       ,COLUMN_NAME as ColName
       , 'Value From ' as [From]
       ,TABLE_NAME as FromSelect
       ,ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY TABLE_NAME DESC, COLUMN_NAME) rn
    FROM INFORMATION_SCHEMA.COLUMNS c
    ) t
WHERE rn = 1;

每个表的结果都是这样。

Select top 1    '   zipcodes    '   as TableName    ,   '   CITY    '   as COLUMN_NAME  ,   CITY    Value From  zipcodes
Select top 1    '   _BHCAMERAPRICE  '   as TableName    ,   '   _BHID   '   as COLUMN_NAME  ,   _BHID   Value From  _BHCAMERAPRICE
相关问题