使用PowerShell检查SQL Server中的行是否存在

时间:2015-03-18 09:28:34

标签: sql sql-server powershell

实际上,我第一次使用 PowerShell 脚本处理。

通过寻找一个好的解决方案,以便在 SQL Server 上执行SELECT,我发现代码如下:

Function IdentityProviderExistsDatabase {
    param(
        [string] $IdPIdentifier
    )

    $SQLQuery = $("SELECT [*] FROM [dbo].[IdPs] WHERE [IdPIdentifier] = '$IdPIdentifier'")

    $SQLConnect = new-object system.data.sqlclient.sqlconnection  
    $SQLConnect.connectionstring = $SQLConnectionString

    $SQLConnect.Open()  

    $command = New-object system.data.sqlclient.SqlCommand   
    $command.connection = $SQLConnect  
    $command.CommandText = $SQLQuery
    $Reader = $command.ExecuteReader()
    while ($Reader.Read()) {
        $Reader.GetValue($1)
    }
}

上面的解决方案运行正常,但实际上我不需要读取任何值;就我的目的而言,我只知道查询是否返回了某些东西,因此只是根据WHERE子句记录是否存在。

有没有办法以更优雅的方式执行此操作,而不是检查循环内的返回值?

2 个答案:

答案 0 :(得分:5)

使用ExecuteScalar() method。根据文件,

  

使用ExecuteScalar方法检索单个值(例如,   来自数据库的聚合值。

样本用法:

$SQLQuery = "SELECT count(*) FROM..."
$SQLConnect = new-object system.data.sqlclient.sqlconnection(...)
$SQLConnect.Open()  
$command = New-object system.data.sqlclient.SqlCommand   
$command.connection = $SQLConnect  
$command.CommandText = $SQLQuery
$scalar = $command.ExecuteScalar() # The select's result is stored in $scalar
$command.Dispose()
$SQLConnect.Dispose()

答案 1 :(得分:0)

你可以像计算一样

 $SQLQuery = $("SELECT count(*) result_count FROM [dbo].[IdPs] WHERE [IdPIdentifier] = '$IdPIdentifier'")

将返回一行