繁体   English   中英

将数据库中每个表的前 5 行导出到 excel - MS SQL Server

[英]Export the top 5 rows of every table in a database to excel - MS SQL Server

我想要一种将数据库中每个表的前 5 行从 SQL 导出到 Excel 电子表格的方法。 所需的输出将是一个 excel 电子表格,其中每个选项卡都是与数据库不同的表,包含前 5 条记录(也是识别哪个选项卡包含哪个表的一种方式)。

过去,我使用以下方法为较小的数据库完成了此操作(但我试图减少手动过程,因为我需要在几个大型数据库上执行此操作):

USE Database_Name
GO 
SELECT *
FROM sys.Tables
GO

我使用此查询获取数据库中表名的列表,然后运行以下代码以获取同一数据库中这些表的前 5 行:

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

第一个和第二个查询以相同的顺序生成表。 因此,以前我将名称列表复制并粘贴到 excel 中(来自第一个查询),为每个表名创建一个选项卡,然后将前 5 行(由第二个查询生成)复制并粘贴到这些选项卡中。 我觉得这可以以更好的方式完成/自动化。 任何帮助或建议将不胜感激!

这是一种在 powershell 中为每个表获取单个 csv 文件的方法:可能可以重写为 Python - 它只是调用invoke-sqlcmd (它本身就是调用sqlcmd.exe )来获取表列表,然后是一个循环将每个表的前 5 行导出到 csv。

$server =  # sql instance name here
$database = # database name here
$outputfolder = # can use values of $server and $database if needed

# if $output doesn't exist: new-item -ItemType Directory $outputfolder

# get list of tables in the database
$tables = (invoke-sqlcmd -ServerInstance $server -Database $database  -Query "select top 10 '[' + object_schema_name(object_id) + '].[' + name + ']' as [Table] from sys.tables order by object_schema_name(object_id), name;").Table


# loop through the tables, exporting each to an individual csv file
foreach ($table in $tables) {

# Remove [] and . characters from table name for the filename
$filename = $table.Replace('[', '').Replace(']', '').Replace('.', '_')

invoke-sqlcmd -ServerInstance $server -Database $database  -Query "select top 5 * from $table;" | export-csv "$outputfolder\$filename.csv" -NoTypeInformation

}


#todo: combine csv files in $outputfolder into a single Excel file.

如果坚持使用 powershell,您可能可以使用Export-Excel做一些事情,但我自己还没有尝试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM