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 中,这可能会有风险,但如果发生这种情况,您就已经拥有了。
我正在尝试 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 中,这可能会有风险,但如果发生这种情况,您就已经拥有了。