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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top