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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top