实际上,我第一次使用 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
子句记录是否存在。
有没有办法以更优雅的方式执行此操作,而不是检查循环内的返回值?
答案 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'")
将返回一行