【发布时间】:2019-04-08 17:36:39
【问题描述】:
我有一个用Go 修补的sql 查询来检查mssql 中的孤立对象。
use DBName
go
sp_change_users_login 'report'
现在,我在 Powershell 中为所有用户数据库自动执行上述操作,并尝试获取孤儿用户。
代码如下:
if($port)
{
$connectionString ="server=$servername,$port;Integrated Security=true;" #uid=$DBUserName; pwd=$dbpwd;Database=$DB;
}
else
{
$connectionString ="server=$servername;Integrated Security=true;"
}
$connection = New-Object System.Data.SqlClient.SqlConnection -ea Stop
$connection.ConnectionString=$connectionString
$connection.Open()
$db_query = @"
Select name from sys.sysdatabases where dbid > 4 and name not in ('ReportServer')
"@
$command = $connection.CreateCommand()
$command.CommandText = $db_query
$result = $command.ExecuteReader()
$object= New-Object System.Data.DataTable
$object.Load($result)
[System.Array]$DBs = $object.name
if($DBs -is [System.Array])
{
foreach($DB in $DBs)
{
## PROBLEM IS HERE ###
$orphan_users_query = @"
use $DB
GO
sp_change_users_login 'report'
"@
$command = $connection.CreateCommand()
$command.CommandText = $orphan_users_query
$result = $command.ExecuteReader()
$object= New-Object System.Data.DataTable
$object.Load($result)
$object | Out-File C:\temp\outfile_property.txt -Append -Force
}
}
问题是 PS 无法识别 go 分隔符,因为它特定于 MSSQL/SSMS。那么,我怎样才能在所有用户数据库中迭代和运行查询,而不创建特定于每个数据库的多个连接?
【问题讨论】:
标签: sql-server powershell