在Powershell脚本中,我有以下代码。我试图从SQL枚举数据库表的列表,然后使用该列表执行后续命令。
$q = "SELECT name FROM master..sysdatabases
WHERE name NOT IN ('tempdb', 'model', 'msdb')"
$ListOfDatabases = Invoke-Sqlcmd -ServerInstance $s.ServerName
-Username $s.Username
-Password $s.Pass
-Query $q
foreach ($db in $ListOfDatabases) {
#If I just print $db Like so...
$db
# yields
# name
# -------
# table1
# table2
#But If I Try to use that value I get an error
$Q = "EXECUTE SOME_PROC($db)"
$Q
# yields
# EXECUTE SOME_PROC([System.Data.DataRow])
# EXECUTE SOME_PROC([System.Data.DataRow])
# EXECUTE SOME_PROC([System.Data.DataRow])
# etc... for each table
那我在哪里错了?我试图为所有表提取字符串值table1和表2等,并在另一个SQL命令中使用它。而且因为SO编辑对我大喊大叫,告诉我我的帖子主要是代码,所以我要添加这个额外的句子来帮助说服'它让我提交这个问题。 - 给我的大部分"解释"在代码的注释中完成。
答案 0 :(得分:3)
$db
是一个具有name
属性的数据行对象。尝试使用子表达式来提取name-property的值:
$Q = "EXECUTE SOME_PROC($($db.Name))"
答案 1 :(得分:0)
您可以做的是扩展变量以获取名称而不是具有name属性的对象,并仅使用值调用存储过程。
$q = "SELECT name FROM master..sysdatabases
WHERE name NOT IN ('tempdb', 'model', 'msdb')"
$ListOfDatabases = Invoke-Sqlcmd -ServerInstance $s.ServerName
-Username $s.Username
-Password $s.Pass
-Query $q
foreach ($db in $ListOfDatabases) {
#If I just print $db Like so...
# $db
# yields
# name
# -------
# table1
# table2
# So we need to delve into each name separately like so
ForEach ($dbName in $db.Name)
{
# This will call the proc with each name in $db
$Q = "EXECUTE SOME_PROC($dbName)"
$Q
}
}