创建或修改临时表以优化数据

已完成

系统将 InMemory 表存储在内存中,因此您可能会发现它们对于少量记录很有用。 您无法在查询中使用 InMemory 表,因为它们不存在于 SQL Server 上。 只要创建表的对象存在,InMemory 类型的临时表中的记录就会存在。

以下代码显示了如何将数据插入到临时表中的示例。

    public static void main(Args _args)
    {
        SalesShippingLabelTmp       salesShippingLabelTmp;

        ttsbegin;

        salesShippingLabelTmp.Label = 1;
        salesShippingLabelTmp.Name  = 'Finance and operations apps';
        salesShippingLabelTmp.insert();

        ttscommit;

        while select salesShippingLabelTmp
            order by Label
        {
            Info(strFmt('%1 %2', salesShippingLabelTmp.Label, salesShippingLabelTmp.Name));
        }
    }

该代码示例看起来与普通表将显示的代码类似。 InMemory 表的范围取决于它的声明方式。 如果在方法中声明它,则范围仅在方法内。

注意

您可以在所有级别声明 InMemory 表,以便它也处于类或窗体的范围内。

您可以使用 setTempData 方法将 InMemory 表从一个对象链接到另一个对象,从而创建新的实例链接,如下所示:

        SalesShippingLabelTmp salesShippingLabelTmp2;
 
        salesShippingLabelTmp2.setTmpData(salesShippingLabelTmp);

您可以通过使用 salesShippingLabelTmp2.setTmp();setTmp 方法将所有表用作 InMemory 表。

若要将 InMemory 表用作窗体数据源,您需要:

  • InMemory 表添加为窗体数据源。
  • 使用 setTempDataInMemory 表窗体数据源的 Init 方法中将数据配置到窗体数据源的记录集,如下所示:
    [DataSource]
    class SalesShippingLabelTmp
    {
        public void init()
        {
            super();
            salesShippingLabelTmp.setTmpData(mySalesCalcLabel.parmSalesShippingLabelTmp());
        }
    }

该代码示例显示如何将 InMemory 表数据设置到窗体数据源。 当您在 Init 以外的方法中使用 setTmpData 方法时,在数据源上使用 executeQuery 进行跟进。

使用 TempDB 表类型创建临时表

TempDB 临时表对于大量数据很有用,您可以在 SQL Server 中的 TempDB 表中创建它们。 您可以创建索引来优化性能,类似于对财务和运营应用中的常规表执行的操作。

使用 TempDB 表与使用 InMemory 表类似,但存在一些关键差异,其中 TempDB 表:

  • 当您将数据从一个 TempDB 表链接到另一个表时,需要 linkPhysicalTableInstance 方法,而不是 setTmpDataInMemory 方法。
  • 可以是全局数据,也可以根据公司数据。
  • 支持交易记录范围或交易记录跟踪系统 (TTS)。
  • 支持索引。
  • 支持联接到常规表。

以下代码显示 TempDB 表的使用,它类似于 InMemory 表的使用,linkPhysicalTableInstance 用于将数据链接到新实例。

    public static void main(Args _args)
    {
        SalesIdTempTable            salesIdTempTable;

        ttsbegin;

        salesIdTempTable.SalesId = 'SO-1';
        salesIdTempTable.insert();

        salesIdTempTable.SalesId = 'SO-2';
        salesIdTempTable.insert();

        ttscommit;

        while select salesIdTempTable
            order by SalesId
        {
            Info(strFmt('%1', salesIdTempTable.SalesId));
        }

        SalesIdTempTable salesIdTempTable2;
 
        salesIdTempTable2.linkPhysicalTableInstance(salesIdTempTable);
    }

您可以使用可扩展数据安全 (XDS) 框架中的 TempDB,为用户生成一个包含允许数据的临时表。 然后,您可以根据刷新频率进行更新。

当用户关闭其会话时,系统会删除 TempDB 表中的所有数据。