BIML 中的嵌套查询

Nested queries in BIML

我正在尝试 BIML,这条路充满了反复试验。

我必须从固定长度的平面文件传输数据,并且我将文件和字段的元数据存储在两个 SQL 服务器 table 中:SourceTable 和 SourceColumn。所以我尝试了以下方法来为我的字段生成元数据:

<Tables>
<# Dim dtTables as DataTable = ExternalDataAccess.GetDataTable(staging.ConnectionString, "SELECT TableName FROM SourceTable")
for each dr as datarow In dtTables.Rows#>
<Table Name="<#= dr.item(0)#>" SchemaName="myDatabase.mySchema">
<Columns>
<# Dim dtColumns as DataTable = ExternalDataAccess.GetDataTable(staging.ConnectionString,"SELECT ColumnName FROM SourceColumn WHERE TableName = '+<#=dr.item(0)#>+'")
for each drColumn as datarow in dtColumns.Rows#>
<Column Name="<#= drColumn.Item(0) #>"></Column>
<#next#>
</Columns>
</Table>
<#next#>
</Tables>

当然,BIML 不希望我在第二个查询中间连接 <#=dr.item(0)#>(table 名称)。

有办法吗?

谢谢!

西蒙.

当您在 <# 中时,您处于“正常”编码 space 因此您可以访问任何可用的变量

改变

Dim dtColumns as DataTable = ExternalDataAccess.GetDataTable(staging.ConnectionString,"SELECT ColumnName FROM SourceColumn WHERE TableName = '+<#=dr.item(0)#>+'")

Dim dtColumns as DataTable = ExternalDataAccess.GetDataTable(staging.ConnectionString,"SELECT ColumnName FROM SourceColumn WHERE TableName = '" & dr.item(0) & "'")

是的,对于未来的评论者来说,如果有人将 sql 注入到您的 table 中,这可能会有风险,但如果发生这种情况,您就已经拥有了。