如何在SQL Server中显示Dynamics导航表选项字段文本值

时间:2018-09-29 18:06:09

标签: dynamics-nav

有时在Dynamics NAV开发期间,使用SQL Server快速查看数据会很有帮助。但是由于类型选项的任何字段都是枚举,因此在SQL Server中获得的只是数值。我需要一种快速而肮脏的方法来获取选项文本值。

3 个答案:

答案 0 :(得分:0)

为了使操作更轻松一些,我创建了一个启用宏的Excel文件,该文件将Dynamics NAV字段选项字符串解析为Sql Server T-Sql Case语句。它提供了水平或垂直的case语句,并将字段名称用作Sql Server中的列别名。享受...

Screenshot

这里是指向Excel文件的链接 Excel File

答案 1 :(得分:0)

在NAV中,您可以读取FieldReference的OPTIONSTRING属性。这是一个逗号分隔的字符串。可以计划一个作业,该作业将按编号循环遍历所有表(在表上过滤的对象虚拟表),找到选项字符串并将其添加到表中。然后在查询中,可以找到“表”,“字段编号”和“字段值”的选项文本值。

RecRef.OPEN(TableNo);
FOR i := 1 TO RecRef.FIELDCOUNT DO BEGIN
  FieldRef := RecRef.FIELDINDEX(i);
  IF FORMAT(FieldRef.TYPE) = 'Option' THEN BEGIN
    optionstring := FieldRef.OPTIONSTRING;
    c := NumberofOptions(optionstring);
    FOR o := 1 TO c DO BEGIN
      OptionsTable.INIT;
      OptionsTable."Table No" := TableNo;
      OptionsTable."Field No" := FieldRef.NUMBER;
      OptionsTable."Option Value" := o-1;
      OptionsTable."Option Text" := SELECTSTR(o, optionstring);
      OptionsTable."Field Name" := FieldRef.NAME;
      IF NOT OptionsTable.INSERT THEN OptionsTable.DELETE;
    END;
  END;
END;

答案 2 :(得分:0)

我经常遇到这个问题。我创建了一个包含选项值(int)和名称(字符串)的表。主键是代码,值。因此,您也可以使用它来解析其他系统的幻数。然后,您可以轻松加入此表:

select Type, i.[Option] [Option Name]
from Object o
join [xxx$IntegerToOption] i on i.Code = 'OBJEKT TYP' and i.Integer = o.Type
order by o.Name

输出:

Type    Option Name
5   Codeunit
2   Form
1   Table
2   Form
2   Form
1   Table
2   Form
5   Codeunit
3   Report