技术开发 频道

在SQL Server2005中实现数组映射(一)



二、SQL中的基本映射
让我们先看看图2显示的结构图:


图2. 在SQL中的数组映射:首先,我们使用一个模板将一个输入数组值映射到一个输出数组中,然后执行这个输出数组。

上面的转换图可用以下几点描述:
1. 输入是一个表名列表。列表可以是常量或是动态的。
2. 在本例子中的映射函数是一个SELECT模板,这个模板只不过是一个标准的带占位符的SELECT表达式。这些占位符表示要从这个列表中插入的元素。
3. 输出是一个DML表达式集合,这些DML表达式将使用被替换的输入值。
 
在读本文的下面部分之前,先看一下图3,图3显示了存储过程在操作微软的标准事例数据库AdventureWorks的实际执行结果。


图3 SQL映射执行效果:SP_map将列表中的每一个表名映射到了SELECT模板表达式中,并使用分开的结果集返回

    下面是我们需要做实现的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通过了一个单独的字符串参(中间由逗号将元素分开)来模拟一个数组。由于这些代码是直接写在程序中的,因此,属于常量列表。
0
相关文章