在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
答案 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