Question

J'ai l'expression de chaîne suivante dans un script PowerShell:

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

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

Était-ce utile?

La solution

Que diriez-vous de:

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

Autres conseils

Je pense que le problème que vous rencontrez est principalement lié à la syntaxe. Si vous avez une variable nommée $ foo, $ {foo} fait référence à la même variable. Ainsi, les références $ {table} et $ {schéma} de votre chaîne SQL fonctionnent correctement.

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 les deux dans leurs réponses, 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 variable est que les variables puissent avoir des caractères inhabituels dans leurs noms. Je recommanderais de ne pas utiliser la syntaxe $ {} (sauf si vous avez une raison convaincante) et de la remplacer par des références droites $ var pour les variables et $ ($ var.member) pour les références de membre dans les chaînes.

Une solution 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top