Pregunta

Tengo la siguiente expresión de cadena en un script de PowerShell:

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

El esquema y la tabla se resuelven a los valores de $ schema y $ table, respectivamente. Sin embargo, se suministra una cadena vacía para $ {col.column_name}. ¿Cómo puedo puntear en el miembro de una variable como parte de una sustitución de cadena?

¿Fue útil?

Solución

Cómo sobre: ??

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

Otros consejos

Creo que el problema que tienes es principalmente relacionado con la sintaxis. Si tiene una variable llamada $ foo, $ {foo} hace referencia a la misma variable. Por lo tanto, las referencias $ {table} y $ {schema} en su cadena de SQL funcionan bien.

El problema es con $ {col.column_name}. Su variable (supongo) se llama $ col, y tiene un miembro llamado column_name. Como Robert y Steven indican en sus respuestas, para referirse a esto, debes usar $ ($ col.column_name). En general, $ (expresión) se reemplazará con el valor de la expresión.

La razón para permitir llaves en nombres de variables es para que las variables puedan tener caracteres inusuales en sus nombres. Recomendaría no usar la sintaxis $ {} (a menos que tenga una razón convincente) y reemplazarla con referencias directas de $ var para variables y $ ($ var.member) para referencias de miembros en cadenas.

Una forma sería:

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

Otra opción sería

"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top