You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将SQL查询结果提取到PowerShell变量中?

如何将SQL查询结果提取到PowerShell变量中

嘿,看你已经写了大半的PowerShell脚本啦,只差最后几步就能把SQL查询结果存到变量里!我来帮你补全并把逻辑讲清楚:

首先,补全你的脚本,把查询结果存入DataTable变量(这是PowerShell里处理表格类数据的常用方式):

$SQLServer = "sqldev1"
$SQLDBName = "SPDEV_Printing"
$SqlQuery = "select * from PcBeheerPrinter WHERE PRT_name = 'bwpsc006'"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"

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

# 新增核心部分:创建数据适配器和数据表,填充查询结果
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($SqlCmd)
$DataTable = New-Object System.Data.DataTable
$SqlAdapter.Fill($DataTable) | Out-Null  # 用Out-Null屏蔽填充时返回的行数提示

# 现在$DataTable就是存储所有查询结果的变量了

接下来,你可以根据查询结果的数量灵活使用这个变量:

  • 如果查询返回单条记录:直接通过行索引+列名提取值,比如:

    # 获取打印机名称
    $printerName = $DataTable.Rows[0]["PRT_name"]
    # 获取打印机位置(假设表中有这个列)
    $printerLocation = $DataTable.Rows[0]["PRT_location"]
    
  • 如果查询返回多条记录:用循环遍历每一行处理,比如:

    foreach ($row in $DataTable.Rows) {
        Write-Host "打印机:$($row["PRT_name"]),状态:$($row["PRT_status"])"
        # 也可以把每行数据转成自定义对象存入变量
        $currentPrinter = [PSCustomObject]@{
            Name   = $row["PRT_name"]
            Status = $row["PRT_status"]
        }
        # 后续可以对$currentPrinter做更多操作
    }
    

另外,如果你想写更简洁的代码,还可以用Invoke-SqlCmd cmdlet(需要先安装SqlServer模块),代码会短很多:

# 首次使用先安装模块(仅需一次)
# Install-Module -Name SqlServer -Scope CurrentUser

$results = Invoke-SqlCmd -ServerInstance "sqldev1" -Database "SPDEV_Printing" -Query "select * from PcBeheerPrinter WHERE PRT_name = 'bwpsc006'"

# $results是对象数组,每一行对应一个对象,直接通过属性名取值
$printerName = $results.PRT_name

Invoke-SqlCmd返回的结果是自定义对象,列名就是对象的属性,用起来会更直观哦~

内容的提问来源于stack exchange,提问作者Lightninstu

火山引擎 最新活动