如何对SQLServer数据库执行SELECT查询并使用PowerShell迭代结果

时间:2015-11-06 17:39:25

标签: sql-server powershell foreach sqldatareader

假设我有一个包含3列的表 - " Column1"," Column2"和" Column3" - 数据类型为所有3的varchar(100)。

使用PowerShell,如何连接到SQL Server并使用SqlDataReader和ForEach运算符来查看" Column2"?

的内容

1 个答案:

答案 0 :(得分:4)

以下是我正在做的事情:

$SqlServer = 'sql.example.com';
$SqlDatabase = 'MyDB';

$SqlConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=SSPI' -f $SqlServer, $SqlDatabase;
$SqlQuery = "SELECT Name FROM dbo.Person ORDER BY Name;";

$SqlConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $SqlConnectionString;
$SqlCommand = $SqlConnection.CreateCommand();
$SqlCommand.CommandText = $SqlQuery;

$SqlConnection.Open();
$SqlDataReader = $SqlCommand.ExecuteReader();

#Fetch data and write out to files
while ($SqlDataReader.Read()) {
    Write-Output $SqlDataReader['Name'];
}
$SqlConnection.Close();
$SqlConnection.Dispose();

如果我没记错,我基本上重构了the MSDN example的代码。

对于那些想知道我为什么使用SqlDataReader的人:我的大部分脚本都使用SqlDataAdapter,但是这个脚本从数据库中检索了大约8,000个PDF,所以我对调用SqlDataAdapter.Fill()并不感兴趣。作为持有比SqlDataAdapter.Fill()更长的表的共享锁的交换,SqlDataReader.Read()通过一次获取一条记录,将内存使用率降低到客户端的可管理级别。