2008-10-25 12 views
6

Ich habe den folgenden Zeichenfolge-Ausdruck in einem Skript Powershell:Ersatzmitglied von Variablen innerhalb Zeichenfolge in Powershell

"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null" 

Das Schema und Tabelle Entschlossenheit auf die Werte von $ Schema und $ Tabelle dargestellt. Für $ {col.column_name} wird jedoch eine leere Zeichenfolge angegeben. Wie kann ich als Teil einer String-Substitution in das Element einer Variablen zeigen?

Antwort

9

Wie wäre:

"select count(*) cnt from $schema.$table where $($col.column_name) is null" 
3

Eine Möglichkeit wäre:

"select count(*) cnt from $schema.$table where $($col.column_name) is null" 

Eine weitere Option

"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name 
4

wäre ich denke, das Problem, das Sie haben in erster Linie ist Syntax verwandt. Wenn Sie eine Variable namens $ foo haben, referenziert $ {foo} dieselbe Variable. Daher funktionieren die Referenzen $ {table} und $ {schema} in Ihrer SQL-Zeichenfolge einwandfrei.

Das Problem ist mit $ {col.column_name}. Ihre Variable (ich nehme an) heißt $ col und hat ein Member namens column_name. Wie Robert und Steven in ihren Antworten darauf hinweisen, sollten Sie $ ($ col.column_name) verwenden. Im Allgemeinen wird $ (Ausdruck) durch den Wert des Ausdrucks ersetzt.

Der Grund für die Verwendung geschweifter Klammern in Variablennamen besteht darin, dass Variablen in ihren Namen ungewöhnliche Zeichen enthalten können. Ich würde empfehlen, die $ {} -Syntax nicht zu verwenden (es sei denn, Sie haben einen zwingenden Grund) und ersetzen sie durch direkte $ var-Referenzen für Variablen und $ ($ var.member) für Member-Referenzen in Strings.

Verwandte Themen