Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据库中每个表的前5行导出到excel-MS SQL Server_Sql_Sql Server_Database - Fatal编程技术网

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

将数据库中每个表的前5行导出到excel-MS SQL Server,sql,sql-server,database,Sql,Sql Server,Database,我想要一种方法,将数据库中每个表的前5行从SQL导出到excel电子表格。所需的输出将是一个excel电子表格,其中每个选项卡将是一个不同于数据库的表,包含前5条记录(也是一种识别哪个选项卡包含哪个表的方法) 在过去,我使用以下方法对较小的数据库执行此操作(但我尝试省去手动过程,因为我需要在几个大型数据库上执行此操作): USE Database_Name GO SELECT * FROM sys.Tables GO 我使用此查询获取数据库中的表名列表,然后运行以下代码获取同一数据库中这些表

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

您的SSR或powershell技能如何?我不熟悉/从未使用过这些技能。在SQL方面,我只使用了MS SQL Server。在自动化方面,它们可能是你最好的选择,尽管如果你不熟悉它们,你将面临一个学习过程。SSRS(SQL Server Reporting Services)可能更简单—您可以按原样将查询放在上面,并使用SSRS将输出格式化为命名的Excel选项卡。现在,这将是MS SQL Server的包/扩展或单独下载。我假设它是一个单独的下载,如果是的话,它连接到AWS服务器是否同样容易?如果查询语法非常相似,那么使用它有什么好处?它只是具有更好的导出功能,还是您更熟悉SSRS?SSRS是SQL Server产品线的一部分(需要SQL许可证),通常与它一起打包;为方便起见,从SQL 2017开始,它是一个单独的下载/安装程序。它不能托管在AWS上,但可以将AWS服务器用作数据源。我在这里要利用的是它在Excel工作簿中生成动态命名工作表的能力,它绝不是SSM的替代品(我猜您正在使用它)。