gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:19 26 4
gpt4 key购买 nike

我想要一种将数据库中每个表的前 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com