2008-10-25 32 views
6

Tôi có biểu hiện chuỗi sau đây trong một kịch bản PowerShell:thành viên thay thế của biến trong chuỗi trong Powershell

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

Giản đồ và bảng quyết tâm để các giá trị của $ lược đồ và bảng $, tương ứng. Tuy nhiên, một chuỗi rỗng được cung cấp cho $ {col.column_name}. Làm thế nào tôi có thể chấm vào thành viên của một biến như một phần của sự thay thế chuỗi?

Trả lời

9

Làm thế nào về:

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

Một cách sẽ là:

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

Một lựa chọn khác sẽ là

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

Tôi nghĩ vấn đề bạn đang gặp phải chủ yếu là cú pháp có liên quan. Nếu bạn có biến có tên là $ foo, $ {foo} sẽ tham chiếu cùng một biến. Vì vậy, các tham chiếu $ {table} và $ {schema} trong chuỗi sql của bạn hoạt động ok.

Sự cố xảy ra với $ {col.column_name}. Biến của bạn (tôi giả định) được gọi là $ col, và có một thành viên có tên là column_name. Như Robert và Steven đều cho biết trong câu trả lời của họ, để tham khảo điều này, bạn nên sử dụng $ ($ col.column_name). Nói chung, $ (expression) sẽ được thay thế bằng giá trị của biểu thức.

Lý do cho phép dấu ngoặc ôm trong tên biến là để các biến có thể có các ký tự không bình thường trong tên của chúng. Tôi khuyên bạn không nên sử dụng cú pháp $ {} (trừ khi bạn có lý do thuyết phục) và thay thế nó bằng tham chiếu $ var thẳng cho biến và $ ($ var.member) để tham chiếu thành viên trong chuỗi.

Các vấn đề liên quan