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

标签 sql sql-server database

我想要一种将数据库中每个表的前 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 做一些事情。但我自己还没有尝试过。

关于sql - 将数据库中每个表的前 5 行导出到 Excel - MS SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48793964/

相关文章:

sql - 从两个 SQL Count() 结果计算百分比

MySQL max() - 不返回 max() 值

database - 是否可以只使用一个 Qt 模块,就像第 3 方 dll 一样?

c# - 创建和使用数据库并轻松安装的 GUI

sql - 如何连接这些表以获得所有表的完整结果集?

sql - 学习编写复杂的报表查询的最佳在线SQL教程是什么?

sql-server - 为什么我的 SQL Server 标识值被重用?

c# - 无法加载文件或程序集 'XXX' 或其依赖项之一。该系统找不到指定的文件

c# - 使用异步/等待的 TransactionScope 登记

php - 更新数据库表的问题