delphi,里面的一个SQL语句。使用到了SHAPE。请问一下,shape有什么作用? 谢谢。sSQL := 'SHAPE { ' +
            ' SELECT ITEM_CODE,QTY,PRICE,TYPE,KIT_ID,TP_CODE,'+.......
 .......请问一下, shape的作用是什么?谢谢。

解决方案 »

  1.   

    http://support.microsoft.com/kb/309130
      

  2.   

    sql的shape查询(章节)  
     不同种类的形状 
    您可以创建三种形状:• 基于关系  
    • 基于参数  
    • 基于组  
    每种类型都有各自的优缺点。您需要选择最适合您的应用程序要求以及运行应用程序的环境的机制。  
    基于关系的层次 
    基于关系和基于参数的层次生成的层次也可由 SQL JOIN 语句表示。但是,它们读取父记录和子记录的方式不同。在基于关系的层次中,要先将所有的父记录和子记录读入本地缓存后再开始进行处理。因此,基于关系的层次在检索记录时的初始开销较高。但是初始检索之后的开销较低。  
    基于参数的层次 
    基于参数的层次最初只读取父记录,然后根据需要获取子记录。尽管降低了初始开销,但您必须向所访问的每个父记录发出新的子查询,而且只要记录集打开就必须保持与数据源的连接。  
    基于组的层次 
    基于组的层次等价于生成一个与细目 SQL 语句联合的聚合 SQL 语句。基于组的层次也等价于对非规范化的数据执行聚合函数。您无法更新求和列和计算列,因为这些列是从多个记录得到的。同基于关系的层次一样,必须预先读取所有记录。  
     回到顶端  简化语法 
    使用 SHAPE 子句可以生成层次化记录集。本节提供简化的语法。由于 SHAPE 语法会变得非常复杂,本文的末尾提供了 SHAPE 子句的正则语法,可用于扩展示例。您可以使用本文末尾的程序测试您自己的 SHAPE 语句。 SHAPE {parent-statement} 
    APPEND Aggregate 
    | ({child-statement} [As Alias] 
    RELATE parent-field TO child-field | parameter-er 
    [, parent-field TO child-field | parameter-er ...]) 
    [, Aggregate | ({child statement})...] SHAPE {non-normalized-statement} [AS Alias] 
    COMPUTE Aggregate 
    | Alias 
    | ({child-statement} [As Alias] RELATE parent-field TO 
    child-field | parameter-er) 
    [, Aggregate | Alias | ({child-statement}...)] 
    [BY grouping-field [, grouping-field]]  SHAPE {non-normalized-statement} [AS Alias] 
     BY grouping-field [, grouping-field] 
     回到顶端  备注 
    • 如果您选择的字段是来自不同表中的同名字段,可能需要为这些字段指派别名,以使 SHAPE 分析器正常工作。  
    • SHAPE APPEND 语法的功能和 OUTER JOIN 语句类似,即使相应的子记录不存在,也会返回一个父记录。  
    • 聚合只能对记录集的相邻子记录中的字段进行操作。若要对子子级等中的字段进行操作,必须生成中间聚合。请参见带聚合的组层次演示示例。  
    • 如果通过 SHAPE APPEND 语法使用聚合函数,聚合值将占用父结果集的附加字段,此附加字段还包含来自父语句的字段。相反,SHAPE COMPUTE 和 SHAPE BY 为聚合创建一个新的父级,而非规范化语句成为子级记录集。  
    • SHAPE 提供程序要求您在使用 SHAPE COMPUTE 时,在 COMPUTE 子句中包括非规范化语句的别名。否则,即使您没有收到语法错误,也会收到一条表明不支持该功能的错误信息。   回到顶端  示例 
    本部分提供了图表示例。这些示例使用罗斯文 (Northwind) 示例数据库中的表。  
    简单关系层次 
    SHAPE {select * from customers} 
    APPEND ({select * from orders} AS rsOrders 
    RELATE customerid TO customerid) 
    生成: Customers.* 
    rsOrders 
     | 
    +----Orders.* 
    在以下图表中,父记录集包含 Customers 表中的所有字段以及名为 rsOrders 的字段。rsOrders 提供了对子记录集的引用并包含 Orders 表的所有字段。其他示例使用了类似的标记。  
    参数化层次 
    SHAPE {select * from customers} 
    APPEND ({select * from orders where customerid = ?}AS rsOrders 
    RELATE customerid TO PARAMETER 0) 
    与简单关系层次生成的层次相同。  
    复合关系层次 
    本示例演示了 customers、orders 和 order details 的一个三级层次:: SHAPE {SELECT * from customers} 
     
     
      

  3.   

    sql的shape查询(章节)  
     APPEND ((SHAPE {select * from orders} 
    APPEND ({select * from [order details]} AS rsDetails 
    RELATE orderid TO orderid)) AS rsOrders 
    RELATE customerid TO customerid) 
    生成: Customers.* 
    rsOrders 
     | 
    +---- Orders.* 
    rsDetails 
     | 
    +----[Order Details].* 
    多重关系层次 
    本示例演示了包含一个父记录集和两个子记录集(其中一个为参数化记录集)的层次: SHAPE {SELECT * FROM customers} 
    APPEND ({SELECT * 
    FROM orders 
    WHERE orderdate < #1/1/1998# AND customerid = ?} 
    RELATE customerid TO PARAMETER 0) AS rsOldOrders, 
    ({SELECT * 
    FROM orders 
    WHERE orderdate >= #1/1/1998#} 
    RELATE customerid TO customerid) AS rsRecentOrders 
    生成: Customers.* 
    rsOldOrders 
     | 
    +---- Orders.* 
    rsRecentOrders 
     | 
    +----Orders.* 
    带聚合的层次 
    SHAPE (select * from orders} 
    APPEND ({select od.orderid, od.UnitPrice * od.quantity as ExtendedPrice 
    from [order details] As od} 
    RELATE orderid TO orderid) As rsDetails, 
    SUM(ExtendedPrice) AS OrderTotal 
    生成: Orders.* 
    rsDetails 
     | 
    +----orderid 
    ExtendedPrice 
    OrderTotal 
    组层次 
    SHAPE {select customers.customerid AS cust_id, orders.* 
    from customers inner join orders 
    on customers.customerid = orders.customerid} AS rsOrders 
    COMPUTE rsOrders BY cust_id 
    生成: rsOrders 
     | 
    +----cust_id 
    Orders.* 
    cust_id 
    带聚合的组层次 
    备注:本示例中的内嵌 SHAPE 子句与带聚合的层次示例中使用的语句相同。 SHAPE 
    (SHAPE {select customers.*, orders.orderid, orders.orderdate 
    from customers inner join orders 
    on customers.customerid = orders.customerid} 
    APPEND ({select od.orderid, 
    od.unitprice * od.quantity as ExtendedPrice 
    from [order details] as od} AS rsDetails 
    RELATE orderid TO orderid), 
    SUM(rsDetails.ExtendedPrice) AS OrderTotal) AS rsOrders 
    COMPUTE rsOrders, 
    SUM(rsOrders.OrderTotal) AS CustTotal, 
    ANY(rsOrders.contactname) AS Contact 
    BY customerid 
    生成: rsOrders 
     | 
    +----Customers.* 
    orderid 
    orderdate 
    rsDetails 
     | 
    +----orderid 
    ExtendedPrice 
    OrderTotal 
    CustomerTotal 
    Contact 
    customerid 
    多重分组 
    SHAPE 
    (SHAPE {select customers.*, 
    od.unitprice * od.quantity as ExtendedPrice 
    from (customers inner join orders 
    on customers.customerid = orders.customerid) inner join 
    [order details] as od on orders.orderid = od.orderid} 
    AS rsDetail 
    COMPUTE ANY(rsDetail.contactname) AS Contact, 
    ANY(rsDetail.region) AS Region, 
    SUM(rsDetail.ExtendedPrice) AS CustTotal, 
    rsDetail 
    BY customerid) AS rsCustSummary 
    COMPUTE rsCustSummary 
    BY Region 
    生成: rsCustSummary 
     | 
    +-----Contact 
    Region 
    CustTotal 
    rsDetail 
     | 
    +----Customers.* 
    ExtendedPrice 
    customerid 
    Region 
    总计 
    SHAPE 
    (SHAPE {select customers.*, 
    od.unitprice * od.quantity as ExtendedPrice 
    from (customers inner join orders 
    on customers.customerid = orders.customerid) inner join 
    [order details] as od on orders.orderid = od.orderid} 
    AS rsDetail 
    COMPUTE ANY(rsDetail.contactname) AS Contact, 
    SUM(rsDetail.ExtendedPrice) AS CustTotal, 
    rsDetail 
    BY customerid) AS rsCustSummary 
    COMPUTE SUM(rsCustSummary.CustTotal) As GrandTotal, 
    rsCustSummary 
    注意,在外层求和中缺少 BY 子句。此示例定义了总计,因为父级行集合包含总计的单个记录和一个指向子记录集的指针。 GrandTotal