0

在 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));
                }
            }
        }
    }
}

结果:

U2 命令:
ID
列 1

OdbcCommand:
ID
NewID

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

4

2 回答 2

1

您可以使用该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
于 2019-06-21T14:47:46.740 回答
0

我认为您在那里的 .net 提供程序中存在某种错误。我无法使用您的代码复制它(使用稍微模糊的查询),但我有一个 UniVerse 后端,虽然它们非常相似,但它们肯定是不同的。

尽管如此,根据 Rocket 的Using UniDataSQL,应该工作的语法是您似乎首先尝试过的。

select ID, ID NewID from SYS_INSTALL_HISTORY_NF where 1=0

“Column0”对我来说似乎很奇怪,因为它很可能来自 .net 提供商本身,而不是来自 UniData。就像查询已经确定了会有多少列,但还没有为它们分配名称。如果那是真的,我希望查询只是失败并抛出异常。您在实际通话中没有做任何其他异常,是吗?您是否尝试过使用非 id 列?

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

祝你好运。

于 2018-10-01T14:29:01.740 回答