本节书摘来自异步社区出版社《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脚本方案