我需要快速了解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)
答案 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