使用 Powershell SQL 将数据提取到 Excel

2024-06-02

我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件。对于小型数据集,我的代码可以工作,但某些表的行数超过 100.000 行,这将需要很长时间。我不在 SQl 服务器中使用该实用程序的原因是因为我想提取多个表。 有没有办法优化我的脚本以将大表导出到 Excel?或者还有其他方法可以做到这一点吗?

我正在使用以下脚本

## ---------- Working with SQL Server ---------- ##

## - Get SQL Server Table data:
$SQLServer = 'server';
$Database = 'database';
$SqlQuery = @'   Select top 10 *   from database.dbo.table   '@;

## - Connect to SQL Server using non-SMO class 'System.Data':
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = `
"Server = $SQLServer; Database = $Database; Integrated Security = True";

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandText = $SqlQuery;
$SqlCmd.Connection = $SqlConnection;

## - Extract and build the SQL data object '$DataSetTable':
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlAdapter.SelectCommand = $SqlCmd;
$DataSet = New-Object System.Data.DataSet;
$SqlAdapter.Fill($DataSet);
$DataSetTable = $DataSet.Tables["Table"];


## ---------- Working with Excel ---------- ##

## - Create an Excel Application instance:
$xlsObj = New-Object -ComObject Excel.Application;

## - Create new Workbook and Sheet (Visible = 1 / 0 not visible)
$xlsObj.Visible = 0;
$xlsWb = $xlsobj.Workbooks.Add();
$xlsSh = $xlsWb.Worksheets.item(1);

## - Build the Excel column heading:
[Array] $getColumnNames = $DataSetTable.Columns | Select ColumnName;

## - Build column header:
[Int] $RowHeader = 1;
foreach ($ColH in $getColumnNames)
{
$xlsSh.Cells.item(1, $RowHeader).font.bold = $true;
$xlsSh.Cells.item(1, $RowHeader) = $ColH.ColumnName;
$RowHeader++;
};

## - Adding the data start in row 2 column 1:
[Int] $rowData = 2;
[Int] $colData = 1;

foreach ($rec in $DataSetTable.Rows)
{
foreach ($Coln in $getColumnNames)
{
## - Next line convert cell to be text only:
$xlsSh.Cells.NumberFormat = "@";

## - Populating columns:
$xlsSh.Cells.Item($rowData, $colData) = `
$rec.$($Coln.ColumnName).ToString();
$ColData++;
};
$rowData++; $ColData = 1;
};

## - Adjusting columns in the Excel sheet:
$xlsRng = $xlsSH.usedRange;
$xlsRng.EntireColumn.AutoFit();

## ---------- Saving file and Terminating Excel Application ---------- ##

## - Saving Excel file - if the file exist do delete then save
$xlsFile = `
"C:\path\file.xls";

if (Test-Path $xlsFile)
{
Remove-Item $xlsFile
$xlsObj.ActiveWorkbook.SaveAs($xlsFile);
}
else
{
$xlsObj.ActiveWorkbook.SaveAs($xlsFile);
};

## Quit Excel and Terminate Excel Application process:
$xlsObj.Quit(); (Get-Process Excel*) | foreach ($_) { $_.kill() };

## - End of Script - ##

有一些简单的魔法可以使这变得更加容易,那就是复制/粘贴。您可以做的是将数据表转换为制表符分隔的 CSV,将其复制到剪贴板,然后粘贴到 Excel 中。我会忽略你的 SQL 部分,因为你似乎已经掌握了这一点。

## ---------- Working with Excel ---------- ##

## - Create an Excel Application instance:
$xlsObj = New-Object -ComObject Excel.Application;

## - Create new Workbook and Sheet (Visible = 1 / 0 not visible)
$xlsObj.Visible = 0;
$xlsWb = $xlsobj.Workbooks.Add();
$xlsSh = $xlsWb.Worksheets.item(1);

## - Copy entire table to the clipboard as tab delimited CSV
$DataSetTable | ConvertTo-Csv -NoType -Del "`t" | Clip

## - Paste table to Excel
$xlsObj.ActiveCell.PasteSpecial() | Out-Null

## - Set columns to auto-fit width
$xlsObj.ActiveSheet.UsedRange.Columns|%{$_.AutoFit()|Out-Null}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Powershell SQL 将数据提取到 Excel 的相关文章

  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 在 T-SQL 中获取 2 位数年份

    我需要获取当前的两位数年份并加一 所以我当前要查找的数字应该是 11 怎么样 你可以做 YEAR GETDATE 100 1 See GETDATE http msdn microsoft com en us library ms18838
  • 如何在 powershell 中更改其他用户的特定注册表设置

    Goal 要编辑特定用户 而不是其他用户 的特定注册表项设置 请在电源外壳 Known 操作系统 Windows 8 1 Embedded Industry Pro 与Win 8 1相同 但具有一些嵌入式功能 我可以在目标计算机上手动执行此
  • 如何获取表中所有列的计数(*)?使用 PostgreSql

    我有一堆表 其中几个有数百列 我需要获取每列的非空值计数 并且我一直在手动执行此操作 我想找出一种方法来获取表中所有列的所有计数 我查了 stackoverflow 和 google 但找不到答案 我尝试了这个 但它只是为每列返回 1 的值
  • 如何处理 AWS Redshift unload 命令中的带引号的值?

    假设 遵循AWS docs https docs aws amazon com redshift latest dg r UNLOAD command examples html我想使用像这样的卸载命令 unload SELECT FROM
  • 按第一个字符分组

    我在 Oracle SQL 中的查询遇到问题 我有一个first name列中的employees桌子 我想根据中的第一个字符对记录进行分组first name 例如 我有 26 条记录 其中一条记录name Alice 一与name Bo
  • 声明日期,然后添加下一个工作日

    我没有得到我需要的结果 我想做的就是声明我的日期 然后添加下一个工作日 IE CASHDATE 1 这有效 但我需要下一个工作日是 5 号 DECLARE CASHDATE DATETIME SET CASHDATE 2016 12 02
  • MySQL:在一条语句上连接多个表

    我有以下数据库结构 层次结构 TABLE 产品类别 id name TABLE product id parent id name 父 ID 是产品类型 ID TABLE treeNode id parent id name type 它是
  • SQL 中的 Snowflake 脚本 - 如何迭代 SHOW 命令的结果?

    我正在查看新的 SQL Snowflake 脚本 预览版 但我不知道如何迭代SHOW命令 特别是当某些列是小写时 https docs snowflake com en developer guide snowflake scripting
  • 使用 Union 或 Join - 哪个更快 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是想知道你是否有一张桌子并且联合起来会比使用联接更有效吗 我确实知道联接创建了更多列 但这更具理论性 联合是否需要像联接那样对另一
  • MySQL 将所有空格替换为 -

    我怎样才能删除一行中的所有空格 我在这里看到很多相同的问题 但所有答案都使用替换选项 替换只能去除一个空格 而不是全部 例如 a b c 变为 a b c Thanks 这可以通过以下 MySQL 函数来实现 SELECT REPLACE
  • Python 和 SQLite:插入表

    具有以下表架构 tablename name varchar 100 age int sex char 1 有一个list有 3 行 每行代表一个表行 row1 laks 444 M row2 kam 445 M row3 kam 445
  • SQL Server 2008插入优化

    我必须将大量行 超过 1 000 000 000 插入到 SQL Server 数据库中 该表有一个 AI Id 两个 varchar 80 列和一个以 GETDATE 作为默认值的小日期时间 最后一项只是为了听觉 但却是必要的 我想知道插
  • knex.where容易受到sql注入攻击吗?

    这是一个后续问题https stackoverflow com a 50337990 1370984 https stackoverflow com a 50337990 1370984 它提到knex table where descri
  • 加载SSIS包时出错

    我正在尝试在 SQL Server 2008R2 上执行 SSIS 包 该脚本检索远程服务器上的数据并将其复制到本地数据库 该作业每小时安排一次 SQL 代理使用代理向远程计算机验证自身身份 身份验证似乎没问题 但在加载 SSIS 包期间出
  • 刷新电量查询VBA

    因此 我使用下面的代码来刷新我的查询连接 但是 如果由于 wtv 原因刷新失败 如何显示消息 因为此 VBA 显示刷新已完成 即使我的查询存在多个错误 Worksheets Details Unprotect Dim Connection
  • 如何使用Dapper获取存储过程的返回值?

    我在 asp net mvc 4 项目 net f w 4 6 1 中使用 Dapper 使用 sql server 2016 Express
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • excel vba范围单元格错误对象定义[重复]

    这个问题在这里已经有答案了 我一直在 Excel 中开发一个宏 该宏对一张工作表 次要 中的表格进行排序 当满足条件时 它应该将该表中的数据添加到第二张工作表 Sheet1 中的另一个表格中 但是我一直运行时出现 1004 错误 对象未定义

随机推荐

  • 在ctypes回调函数中使用线程锁

    我想使用扭曲应用程序中的 ctypes dll 这里编造的最小示例 from ctypes import from threading import Lock lock Lock dll windll LoadLibrary mydll d
  • 数组数据标准化

    我有一个表示强度 黑到白 的值数组 在 1 0 和 1 0 之间 我需要一种方法将双精度值从 1 0 到 1 0 映射到 0 到 255 并返回 更概括地说 我有一个数据数组 我需要将数据的最小值和最大值映射到提供的最小值和最大值 基本结构
  • SqlException超时未达到

    我们的服务器有时会抛出这个众所周知的异常 超时已过 操作完成之前超时时间已过 或者服务器未响应 当服务器处理大请求时 这种情况会在压力下发生 我做了一些研究 发现我可以改变连接字符串连接超时设置和 或SqlCommand 超时数据读取器属性
  • mongodb使用skip和limit排序不根据索引对记录进行排序

    我正在尝试使用 Mongodb 进行分页skip and limit 我想要按顺序获取页面记录register time 在数据库中 记录是按索引排序的 而不是按register time 如何使多页记录 多次跳转 遵循相同的内容regis
  • 从 GUID 获取类型

    由于种种原因 我需要在C 中实现类型缓存机制 幸运的是 CLR 提供了Type GUID来唯一标识一个类型 不幸的是 我找不到任何方法来根据此 GUID 查找类型 有Type GetTypeFromCLSID 但根据我对文档 和实验 的理解
  • 我应该如何解决 GNAT GPS“找不到库”问题并在 Mac 上构建我的第一个“Hello World”程序?

    我下载了 GNAT Community 2019 并安装在我的 Mac 上的主文件夹 Users leon opt GNAT 中 我在目录 Users leon opt GNAT 2019 bin 中运行命令 gps GPS 出现了 然后我
  • Azure RM 模板。具有多个数据磁盘的多个虚拟机

    我正在尝试创建一个模板 该模板将使用复制功能部署具有可变数量的多个数据磁盘的多个虚拟机 我严格遵循文档 但我的部署仍然失败 https learn microsoft com en us azure azure resource manag
  • 当你的方法签名不允许抛出异常时如何抛出异常?

    我有一个这样的方法 public void getSomething 我想扔一个Exception inside getSomething 编译器不允许我这样做 因为我的方法不允许Exception被扔在那里 但我需要抛出一个子类Excep
  • 如何在乳胶表中合并一行中的单元格?

    在表中 我想合并一些列 但不是所有行 我怎样才能用 LaTeX 实现这一点 multicolumn
  • 检查注册表中是否存在密钥

    我有一个Dictionary
  • @Order可以应用于@Transactional吗?

    我有一个用 Transactional 和另一个自定义注释 Custom 注释的方法 此自定义注释包含在建议中 操作顺序如下 1 Transactional method gets called 2 Sees Transactional a
  • JavaScript 画布内存问题

    我在用着getImageData putImageData在 HTML5 画布上能够操作图片 我的问题是浏览器似乎从来没有释放任何内存 http jonelf posterous com lite gc men for sent 直到我关闭
  • CakePHP3 中令人困惑的验证与应用程序规则

    有关验证的多个问题可能属于同一类 因为它们都在解决 CakePHP 3 中的新验证概念 我已阅读章节 1 http book cakephp org 3 0 en orm validation html 2 http book cakeph
  • 如何查看Eigen C++模板库的版本号?

    我添加了几个不同版本的 Eigen 默认值 包括 Visual C 的目录 但是我在使用的时候遇到了崩溃的问题LDLT Cholesky 分解 一些测试数值示例 所以我想在调试代码时确定哪个版本实际上是活动的 是否有任何函数可以指示当前活动
  • 手机重置后AlarmManager闹钟不触发

    在我的应用程序中 用户加入一个计划 然后第二天中午会出现警报通知 这是我的代码 首先 我在 AlarmManager 中设置一个闹钟 如下所示 set alarm to the next day 12 00 noon of the join
  • app-release-unsigned.apk 未签名

    我在 github 上下载了 Android 应用程序的 zip 文件 并尝试运行它 但出现一个包含此消息的对话框 app release unsigned apk is not signed Please configure the si
  • 在 Perl 中,如何制作数组的深层复制? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Perl 中制作数据结构深层复制的最佳方法是什么 https stackoverflow com questions 388187 whats the best way to make a dee
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • Cloud SQL 间歇性通信链路失败

    我在用着jmeter对使用 Cloud SQL 的 GAME Web 服务进行压力测试 我收到间歇性通信链接失败异常 我尝试过使用直接连接和连接池 并且在这两种情况下都看到了异常 随着每秒请求数的增加 异常也会增加 请注意 我们使用的是最高
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想