PowerShell スクリプトに次の文字列式があります。
"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null"
スキーマとテーブルは、それぞれ $schema と $table の値に解決されます。ただし、${col.column_name} には空の文字列が指定されています。文字列置換の一部として、変数のメンバーにどのようにドットを付けることができますか?
PowerShell スクリプトに次の文字列式があります。
"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null"
スキーマとテーブルは、それぞれ $schema と $table の値に解決されます。ただし、${col.column_name} には空の文字列が指定されています。文字列置換の一部として、変数のメンバーにどのようにドットを付けることができますか?
どうですか:
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
あなたが抱えている問題は主に構文に関連していると思います。$foo という名前の変数がある場合、${foo} は同じ変数を参照します。したがって、SQL 文字列内の ${table} および ${schema} 参照は正常に機能します。
問題は ${col.column_name} にあります。あなたの変数 (私が推測する) は $col と呼ばれ、column_name という名前のメンバーがあります。ロバートとスティーブンの両方が回答で示しているように、これを参照するには、$($col.column_name) を使用する必要があります。通常、$(expression) は式の値に置き換えられます。
変数名に中括弧を許可する理由は、変数の名前に特殊な文字を含めることができるようにするためです。${} 構文を使用せず (やむを得ない理由がない限り)、変数の直接の $var 参照と文字列内のメンバー参照の $($var.member) に置き換えることをお勧めします。
1つの方法は次のとおりです。
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
別のオプションは
"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name