2008-10-25 5 views
6

J'ai l'expression de chaîne suivante dans un script PowerShell:Membre suppléant de variable dans la chaîne en Powershell

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

Le schéma et la détermination de la table aux valeurs de schéma $ et une table de $, respectivement. Cependant, une chaîne vide est fournie pour $ {col.column_name}. Comment puis-je dot dans le membre d'une variable dans le cadre d'une substitution de chaîne?

Répondre

9

Que diriez-vous:

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

Une façon serait:

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

Une autre option serait

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

Je pense que le problème que vous rencontrez est principalement liée syntaxe. Si vous avez une variable nommée $ foo, $ {foo} référence la même variable. Donc, les références $ {table} et $ {schema} dans votre chaîne sql fonctionnent bien.

Le problème est avec $ {col.column_name}. Votre variable (je suppose) s'appelle $ col et a un membre nommé nom_colonne. Comme Robert et Steven l'indiquent tous deux dans leurs réponses, pour y faire référence, vous devez utiliser $ ($ col.column_name). En général, $ (expression) sera remplacé par la valeur de l'expression.

La raison pour autoriser les accolades dans les noms de variables est que les variables peuvent avoir des caractères inhabituels dans leurs noms. Je recommande de ne pas utiliser la syntaxe $ {} (à moins que vous n'ayez une raison impérieuse), et de la remplacer par des références droites $ var pour les variables et $ ($ var.member) pour les références membres dans les chaînes.

Questions connexes