如何使用U2提供程序为Unidata查询中的列添加别名

时间:2018-09-28 05:56:08

标签: c# u2 unidata rocket-u2

在SQL Server中,我可以像这样创建列别名:

select id as NewID from sometable

如何在U2提供程序中完成此操作?

我尝试过:

select id NewID    --returns Column0
select id as NewID --returns Column0
select id "NewID"  --returns Column0
select id 'NewID'  --returns Column0

编辑:

看起来Unidata处理ODBC和U2连接的方式有所不同。这是一个仓库:

using System;
using System.Data.Odbc;
using U2.Data.Client;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var csU2 = "Database=XXX;User ID=XXX;Password=XXX;Server=XXX;ServerType=UNIDATA;RpcServiceType=udserver;FirstNormalForm=True";
            var csOdbc = "DSN=XXX";

            var sql = "select ID, ID as NewID from SYS_INSTALL_HISTORY_NF where 1=0";

            Console.WriteLine("U2Command:");

            using (var cnn = new U2Connection(csU2))
            using (var cmd = cnn.CreateCommand())
            {
                cmd.CommandText = sql;
                cnn.Open();
                var reader = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.WriteLine(reader.GetName(i));
                }
            }

            Console.WriteLine();
            Console.WriteLine("OdbcCommand:");

            using (var cnn = new OdbcConnection(csOdbc))
            using (var cmd = cnn.CreateCommand())
            {
                cmd.CommandText = sql;
                cnn.Open();
                var reader = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.WriteLine(reader.GetName(i));
                }
            }
        }
    }
}

结果:

U2Command:
ID
列1

OdbcCommand:
ID
NewID

u2 odbc驱动程序版本:7.140.01.8004 u2 .net提供程序版本:2.2.0.0

2 个答案:

答案 0 :(得分:0)

我认为您在.net提供程序中存在某种错误。我无法使用您的代码(带有轻微刺耳的查询)来复制它,但是我有UniVerse后端,尽管它们非常相似,但是它们之间肯定是不同的。

不过,根据Rocket的Using UniDataSQL,应该首先尝试的语法应该是“应该工作”。

select ID, ID NewID from SYS_INSTALL_HISTORY_NF where 1=0

“ Column0”对我来说似乎很奇怪,因为这很可能来自.net提供程序本身而非UniData。就像查询已确定会有多少列,但尚未为其分配名称一样。如果那是真的,我希望查询只是失败而引发异常。您没有在实际呼叫中捕获任何其他异常吗?您是否尝试过使用非id列?

您可以通过添加另一个词典项来解决所有这些问题,但这似乎对某些应该起作用的工作很沉重。我会支持它,并看看他们的想法。

祝你好运。

答案 1 :(得分:0)

您可以使用COL.HDG命令来完成所需的操作

一些例子:

SELECT ID COL.HDG "NewID" FROM SYS_INSTALL_HISTORY_NF WHERE 1=0
SELECT ID COL.HDG 'NewID' FROM SYS_INSTALL_HISTORY_NF WHERE 1=0