《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》—— 使用Invoke-Sqlcmd实施批量导出

本节书摘来自异步社区出版社《PowerShell V3—SQL Server 2012数据库自动化运维权威指南》一书中的第2章,第2.18节,作者:【加拿大】Donabel Santos,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.18 使用Invoke-Sqlcmd实施批量导出

本方案描述了如何用PowerShell和Invoke-Sqlcmd将表内容导出到CSV文件。

2.18.1 准备

访问AdventureWorks2008R2数据库,我们将使用Person.Person表。

如果你的系统中没有C:Temp目录,创建C:Temp目录。

2.18.2 如何做…

1.通过“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打开PowerShell控制台。

2.导入SQLPS模块,创建一个新的SMO服务器对象。

#import SQL Server module
Import-Module SQLPS -DisableNameChecking
#replace this with your instance name
$instanceName = "KERRIGAN"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server
-ArgumentList $instanceName

3.添加如下脚本并运行。

#database handle
$dbName = "AdventureWorks2008R2"
$db = $server.Databases[$dbName]
#export file name
$exportfile = "C:\Temp\Person_Person.csv"
$query = @"
SELECT 
  * 
FROM 
  Person.Person
"@
Invoke-Sqlcmd -Query $query -ServerInstance "$instanceName" -Database $dbName |
Export-Csv -LiteralPath $exportfile –NoTypeInformation

2.18.3 如何实现…

在这个方案中,我们将结果导出到CSV文件。本方案的导出方法中有两个核心部分。

第一部分是使用Invoke-Sqlcmd cmdlet执行查询。我们指定实例和数据库,并通过该cmdlet发送查询语句给SQL Server。

Invoke-Sqlcmd -Query $query -ServerInstance "$instanceName" -Database $dbName |
Export-Csv -LiteralPath $exportfile -NoTypeInformation

第二部分是通过管道将结果传输到Export-Csv cmdlet,并指定存储结果的文件名。我们也指定了-NoTypeInformation,所以在文件的第一行我们将忽略#TYPE .NET信息类型。

Invoke-Sqlcmd -Query $query -ServerInstance "$instanceName" -Database $dbName |
Export-Csv -LiteralPath $exportfile –NoTypeInformation

2.18.4 请参阅…

执行查询语句/SQL脚本方案

上一篇:MySQL主从失败 错误Got fatal error 1236解决方法


下一篇:3Python全栈之路系列之基于socket实现文件上传