【问题标题】:How do I execute a SELECT query against a SQLServer database and iterate results using PowerShell如何对 SQLServer 数据库执行 SELECT 查询并使用 PowerShell 迭代结果
【发布时间】:2015-11-06 17:39:25
【问题描述】:

假设我有一个包含 3 列的表——“Column1”、“Column2”和“Column3”——所有 3 列的数据类型都是 varchar(100)。

使用PowerShell,如何连接SQL Server并使用SqlDataReader和ForEach操作符查看“Column2”的内容?

【问题讨论】:

  • 你检查过这个吗 - stackoverflow.com/questions/25682703/… 一旦你将数据放入 DataSet 中,你可以通过引用表轻松获取列。
  • @Mitul - 您的链接显示了连接和发出查询的示例代码,但它没有显示迭代结果集和评估特定列...
  • 那么你可以试试 $DataSet.Tables[0].Rows[0]["Column2"] 看看它是否有效。这就是它在 .Net 中的工作方式。
  • 我更喜欢使用 SqlDataReader 而不是 DataSet 或 DataTables...
  • 如果您了解基本的 ADO.NET,那就没什么不同了 - social.technet.microsoft.com/Forums/en-US/…

标签: sql-server powershell foreach sqldatareader


【解决方案1】:

我大致是这样做的:

$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() 通过一次获取一条记录将内存使用量降低到客户端可管理的水平。

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2022-09-22
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多