二、在SQL中的基本映射
让我们先看看图2显示的结构图:图2. 在SQL中的数组映射:首先,我们使用一个模板将一个输入数组值映射到一个输出数组中,然后执行这个输出数组。
上面的转换图可用以下几点描述:
1. 输入是一个表名列表。列表可以是常量或是动态的。
1. 输入是一个表名列表。列表可以是常量或是动态的。
2. 在本例子中的映射函数是一个SELECT模板,这个模板只不过是一个标准的带占位符的SELECT表达式。这些占位符表示要从这个列表中插入的元素。
3. 输出是一个DML表达式集合,这些DML表达式将使用被替换的输入值。
图3 SQL映射执行效果:SP_map将列表中的每一个表名映射到了SELECT模板表达式中,并使用分开的结果集返回
下面是我们需要做实现的SQL代码:
下面是我们需要做实现的SQL代码:
EXEC SP_map
@StmtTemplate = 'select count(*) as Rows from <MAIN_ARG>',
@MainArray = 'Person.Address, Person.Contact,
Production.Culture, Sales.Customer', @Verbose = 1
在上面代码中加入@Verbose标志是为了这个存储过程也可以使用如下的表达式:
select count(*) as Rows from Person.Address
select count(*) as Rows from Person.Contact
select count(*) as Rows from Production.Culture
select count(*) as Rows from Sales.Customer
注意:如果我们没有AdventureWorks数据库,可以使用从任何数据库获得的表名。
@StmtTemplate除了使用标号< MAIN_ARG>是一个标准的DML表达式,这个标号是一个占位符来替换我们的输入列表中的每一个元素。
我们大家都知道,SQL并没有数组列表的概念。因此,SP-map通过了一个单独的字符串参(中间由逗号将元素分开)来模拟一个数组。由于这些代码是直接写在程序中的,因此,属于常量列表。
我们大家都知道,SQL并没有数组列表的概念。因此,SP-map通过了一个单独的字符串参(中间由逗号将元素分开)来模拟一个数组。由于这些代码是直接写在程序中的,因此,属于常量列表。