Frage

Ich habe den folgenden String-Ausdruck in einem Powershell-Skript:

"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. Allerdings wird ein leerer String für $ {col.column_name} geliefert. Wie kann ich Punkt in das Element einer Variablen als Teil einer Zeichenfolge Substitution?

War es hilfreich?

Lösung

Wie wäre:

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

Andere Tipps

Ich denke, das Problem, das Sie haben in erster Linie ist Syntax verwendet. Wenn Sie eine Variable mit dem Namen $ foo haben, $ {foo} verweist auf die gleiche Variable. Also, der $ {Tabelle} und $ {Schema} Referenzen in Ihrer SQL-String Arbeit ok.

Das Problem ist mit $ {col.column_name}. Ihre Variable (ich nehme an) wird $ col genannt und hat ein Mitglied namens column_name. Als Robert und Steven beide in ihren Antworten zeigen, auf diese Bezug zu nehmen, sollten Sie $ ($ col.column_name) verwenden. In der Regel wird $ (Ausdruck) mit dem Wert des Ausdrucks ersetzt werden.

Der Grund für die Zahnspange in Variablennamen erlaubt ist, so dass Variablen ungewöhnliche Zeichen in ihrem Namen hat. Ich würde empfehlen, nicht die $ {} Syntax (es sei denn Sie einen zwingenden Grund haben), und es mit gerade $ var Referenzen für Variablen und $ ($ var.member) für die Mitglieds Referenzen in Strings zu ersetzen.

Eine Möglichkeit wäre:

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

Eine andere Möglichkeit wäre,

"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top