【问题标题】:DynamicsAX - Get SQL Statement by tablenameDynamicsAX - 通过表名获取 SQL 语句
【发布时间】:2014-08-05 10:35:11
【问题描述】:

我想在 AX2012 中创建一个类,我可以从 Ax2012 Business Connector 调用它,它允许我为指定的表生成 SQL 语句。

我在课堂上实现的方法是:

client server public static str getTableStatement(str tableName)
{    
     OMInternalOrganization org;
     select generateOnly org;
     info(org.getSQLStatement());
     return org.getSQLStatement();
}

我的问题是:我现在如何使用参数 tableName 而不是 OMInternalOrganization 的静态分配。

找到另一种获取 SQL 语句的方法也可以。

我是一名 .Net 开发人员,几乎没有 X++ 开发经验。

感谢您的帮助!

【问题讨论】:

  • “找到另一种获取 SQL 语句的方法也可以” - 您的 getSQLStatement 方法的当前逻辑是什么?
  • @10p - getSQLStatement 是 2012 年的基础。我也不知道。
  • 我当前的逻辑是从 ax 元数据服务中获取表名并基于此构建 sql 语句。我在这里遇到了继承问题,所以我发现可以从 AX 获取语句,但我不知道如何。

标签: c# sql axapta dynamics-ax-2012 ax


【解决方案1】:

您可以使用SysDictTable::makeRecord

client server public static str getTableStatement(str tableName)
{
    Common buffer;
    ;

    buffer = SysDictTable::newName(tableName).makeRecord();
    select generateOnly buffer;
    info(buffer.getSQLStatement());
    return buffer.getSQLStatement();
}

【讨论】:

  • 谢谢,正是我需要的!
【解决方案2】:

如果不需要表格字段的列表,可以使用下面的代码。

client server public static str getTableStatement(str _tableName)
{
    SysDictTable dt = SysDictTable::newName(_tableName);
    str ret;    

    if (dt)
    {
        ret = strFmt('SELECT * FROM %1', dt.name(DbBackend::Sql));
    }

    return ret;
}

附:如果您只对 SQL Server(而不是 AX)中的表名感兴趣,则可以修改代码。

【讨论】:

  • 感谢有关 dbBackend::SQL 的信息,我不确定这是否适用于表继承。
  • 对于派生表,它总是返回基表名称,因为在 SQL Server 数据库中只有一个表用于表继承层次结构。正如我所提到的,如果您不需要返回字段名称(即您已经知道需要使用的字段或可以在其他地方获取此信息),它可能会很有用。
  • 啊,好吧。为了完整起见,我怎样才能获得单个表的所有 SQL 字段名称?
  • 在 AX 中 - 通过使用 DictTableDictField 类,以及 DictField.name(DbBackend::Sql)。在 SQL Server 中 - 请参阅 stackoverflow.com/questions/600446
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2021-05-21
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多