Membro suplente da variável dentro de string no PowerShell
-
04-07-2019 - |
Pergunta
Eu tenho a seguinte expressão de cadeia em um script PowerShell:
"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null"
O esquema ea tabela resolução para os valores de $ esquema e $ table, respectivamente. No entanto, uma seqüência vazia é fornecido por US $ {col.column_name}. Como posso dot para o membro de uma variável como parte de uma substituição corda?
Solução
Como sobre: ??
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
Outras dicas
Eu acho que o problema que você está tendo é principalmente sintaxe relacionado. Se você tem uma variável chamada $ foo, $ {foo} referências a mesma variável. Assim, o $ {table} e $ {esquema} referências em sua ok trabalho seqüência SQL.
O problema é com $ {col.column_name}. Sua variável (presumo) é chamado $ col, e tem um column_name membro nomeado. Como Robert e Steven ambos indicam em suas respostas, para se referir a isso, você deve usar $ ($ col.column_name). Em geral, $ (expressão) serão substituídos com o valor da expressão.
A razão para permitir chaves em nomes de variáveis ??é para que as variáveis ??podem ter personagens incomuns em seus nomes. Eu recomendaria não usando a sintaxe $ {} (a menos que tenha uma razão convincente), e substituindo-o em linha reta $ referências var para variáveis ??e $ ($ var.member) para referências associadas em strings.
Uma forma seria:
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
Outra opção seria
"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name