zoukankan      html  css  js  c++  java
  • X++学习(五)

    X++中的SQL成分介绍


    1.Tables数据类型

    在MorphX中所有用AOT创建的表,都可以当做类的定义.要操作(增,删,改,查)表中的记录,至少要声明一个表变量.表变量和对象有如下不同之处:

        a.不能为表变量分配空间.              -----隐式分配

        b.不能从其他表变量中继承.

        c.表变量中的字段是public的                ------可以在任何地方引用.

        d.表变量中的字段可以被表达式引用.

       common之于tables就如object之于Objects,所以可以用common引用所有的表中的数据.

       表变量的定义:

    void MyMethod()

    {

    // Declares and allocates space for one CustTable record

    CustTable custtable;

    }

    引用表表量中的字段

    void PrintAccountNo();

    {

    CustTable CustTable;

    Print CustTable.AccountNo;

    }

    2.Select语句

    a.While Select

    While Select(按照一定规则)在一些记录中遍历并可以在每条记录上执行一定的语句,因此While Select可以执行数据操作.当用while select执行数据操作的时候,应该在一个transaction中操作以确保数据完整性.

    举例如下:

    static void deleteTransFromVoucher(JournalNum _journalNum,

    Voucher _voucher)

    {

      LedgerJournalTrans ledgerJournalTrans;

      LedgerJournalTable ledgerJournalTable = LedgerJournalTable::find(_journalNum);

      Counter counter;

      ttsBegin;

      while select forUpdate ledgerJournalTrans

      index hint NumVoucherIdx

      where ledgerJournalTrans.journalNum == _journalNum &&

      ledgerJournalTrans.voucher == _voucher

      {

      ledgerJournalTrans.doDelete();

      counter++;

      }

      if (counter && ledgerJournalTable.journalType != LedgerJournalType::Periodic)

      NumberSeq::release(ledgerJournalTable.voucherSeries, _voucher);

      ttsCommit;

     

    }

    void printTel()

    {

    CustTable Cust;

    while select Cust order by NameRef

    where AccountNo > 2000?&&

    AccountNo <=3000?>

    {

    print Cust.NameRef, Cust.TelephoneNo;

    }

    }

    删除一组记录:delete_from

    用while select可以用如下方式表述:

    {

    record r;

    while select r

    where ...

    {

    r.delete();

    }

    }

    但是用delete_from可以减少交互次数,提高效率

    {

    record r;

    delete_from r where ....;

    }

    3.X++和SQL在处理聚集函数时的不同

    当一个查询的where条件不匹配任何行的时候,标准的SQL保证总有一行返回,count返回zero,其他的聚集函数列返回null.

    由于Axapta不支持null值的概念,所有有一些略微的不同之处:

    当聚集函数返回null的时候,就没有行返回给用户.

    如果只用了count这个聚集函数,那么将会返回zero.

    如果没有用聚集函数,但是某一列返回了null,将会抛出信息为不支持null的异常.

    尽管Axapta不支持DBMS意义上的null,但是有其他类型的数据包含一个特定的值在一定的环境下可以当做null值使用.

    4.X++和SQL在处理Group by时的不同.

    X++不允许group by和order by出现在同一select语句中,这意味这显示的排序是不允许的.但是会按照group by中的元素列表自动隐式排序.

  • 相关阅读:
    简明Secure boot介绍
    密码学有什么用?
    mkimage, no such file or dir
    嵌入式系统安全简介
    希尔排序
    jQuery选择器
    css 选择器
    安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决
    mac下安装安卓开发环境
    IOS开发小记-内存管理
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/330839.html
Copyright © 2011-2022 走看看