Membro sostitutivo della variabile all'interno della stringa in Powershell
-
04-07-2019 - |
Domanda
Ho la seguente espressione di stringa in uno script di PowerShell:
"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null"
Lo schema e la tabella vengono risolti rispettivamente ai valori di $ schema e $ table. Tuttavia, viene fornita una stringa vuota per $ {col.column_name}. Come posso aggiungere un punto al membro di una variabile come parte di una sostituzione di stringa?
Soluzione
Che ne dici di:
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
Altri suggerimenti
Penso che il problema che stai riscontrando sia principalmente legato alla sintassi. Se hai una variabile chiamata $ foo, $ {foo} fa riferimento alla stessa variabile. Quindi, i riferimenti $ {table} e $ {schema} nella tua stringa sql funzionano bene.
Il problema è con $ {col.column_name}. La tua variabile (presumo) si chiama $ col e ha un membro chiamato nome_colonna. Come indicano Robert e Steven nelle loro risposte, per fare riferimento a questo, dovresti usare $ ($ col.column_name). In generale, $ (espressione) verrà sostituito con il valore dell'espressione.
La ragione per consentire le parentesi graffe nei nomi delle variabili è che le variabili possono avere caratteri insoliti nei loro nomi. Consiglierei di non usare la sintassi $ {} (a meno che tu non abbia un motivo convincente) e di sostituirla con riferimenti $ var semplici per le variabili e $ ($ var.member) per i riferimenti dei membri nelle stringhe.
Un modo sarebbe:
"select count(*) cnt from $schema.$table where $($col.column_name) is null"
Un'altra opzione sarebbe
"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name