【问题标题】:How to see the SQL expression of an X++ select statement Pre Ax2012?如何查看 X++ 选择语句 Pre Ax2012 的 SQL 表达式?
【发布时间】:2016-11-25 03:01:11
【问题描述】:

我正在使用 Axapta 4.0,想看看我的 x++ 代码生成了什么 SQL 语句。

如何查看生成的 SQL 语句?

一些背景知识,所以您可能会理解我为什么要查看代码。 我的 X++ 源代码可以编译,但在执行过程中我收到消息,它无法加入表,因为 where 子句错误(不匹配)。我在 AOT 中查找它并匹配。

我读过这个how-to-see-the-sql-expression-of-an-x-select-statement,但它似乎只适用于 AX2012 而不是 Axapta4.0

我有一个在这里不起作用的重要声明

select *
    FROM ltabInventTable
    join * FROM ltabModelList
        where  ltabModelList.ItemId == ltabInventTable.ItemId
        && ltabModelList.IsAssortment == 0
    join * FROM ltabInventTableModule
        where ltabInventTableModule.ITEMID == ltabInventTable.ITEMID
        && ltabInventTableModule.ModuleType == 1
    join * FROM ltabCharValue
        where ltabCharValue.CHARACTERVALUE == ltabModelList.MODELLCONFIGID
    join * FROM ltabBarcodes
        where ltabBarcodes.ITEMID == ltabInventTable.ITEMID
    join * from ltabInventDim
        where ltabInventDim.INVENTDIMID == ltabBarcodes.InventDimId
    join * FROM ltabConfigTable
        where ltabConfigTable.ITEMID == ltabBarcodes.ITEMID
        && ltabConfigTable.CONFIGID == ltabInventDim.CONFIGID
        && ltabConfigTable.MODELCONFIGID == ltabModelList.MODELLCONFIGID
    outer join ltabPriceDiscItemResult //IN HERE WE HAVE THE PROBLEM
       where ltabPriceDiscItemResult.ITEMID == ltabModelList.ITEMID
        && ltabPriceDiscItemResult.MODELCONFIGID == ltabModelList.MODELLCONFIGID
        && ltabPriceDiscItemResult.SIZEID == ltabModelList.SizeID;

我有一个较小的版本。

SELECT * FROM ltabModellist //AWESOME THIS WORKS
    outer join ltabPriceDiscItemResult
       where ltabPriceDiscItemResult.ITEMID == ltabModelList.ITEMID
        && ltabPriceDiscItemResult.MODELCONFIGID == ltabModelList.MODELLCONFIGID
        && ltabPriceDiscItemResult.SIZEID == ltabModelList.SizeID;

较小的版本与较大的版本完全一样,但较大的版本会引发错误。

编辑:

请求了错误消息。问题是错误只有德语。 我将提供德语错误消息和它的谷歌翻译。

原文:

Resultat Preisabschrift (PriceDiscItemResult) kann 中的 Ein Datensatz nicht ausgewählt werden。 Der Join enthält in der WHERE-Klausel keine Verknüpfung zwischen den Join-Tabellen。

谷歌翻译:

结果 pricemarkdown (PriceDiscItemResult) 中的记录不能 选择。 WHERE 子句中的连接不包含 连接表。

【问题讨论】:

  • 我不想说显而易见的事情,但有人必须这样做...您的第一个选择最后缺少分号?
  • 哦,是的,但是在复制和粘贴过程中可能会丢失。我尝试了与 while select 相同的方法,但这也不起作用。但是谢谢,如果它只是一个分号,我现在会感到有点尴尬:)。我会在上面修复它
  • @ian_scho 如果它是一个分号,我不会感到惊讶。我对 axapta 还很陌生
  • 完整的错误信息是什么?
  • 尝试在其他连接之前移动外连接(参见Error message when using outer join for a form data source

标签: axapta microsoft-dynamics x++


【解决方案1】:

使用Sql profiler捕获sql语句。

下面的博客详细解释。

Brandon’s Dynamics AX SQL Server Profiler Recipe to see the underlying Tables and SQL

要了解有关 SQL Profiler 的更多信息,请参阅 msdn 文章。 SQL Server Profiler

【讨论】:

  • 我会说这个答案是正确的,我会给它一个赞成票,但你应该提供更多的上下文,所以如果视频或博客被删除,其他用户仍然会知道该怎么做。
【解决方案2】:

AX 客户端的 SQL 选项卡上的用户选项中有一些跟踪设置,允许您在各种输出(文件、表、信息日志)中记录 sql 语句。请参阅Tracing with the Tools Menu 了解更多信息。

服务器和客户端的配置实用程序也有一些跟踪选项(有关详细信息,请参阅Set tracing options)。

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多