Как создать псевдоним столбца в запросе Unidata с провайдером 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:
Я БЫ
Column1
OdbcCommand:
Я БЫ
NewID
версия драйвера u2 odbc: 7.140.01.8004 версия поставщика u2.net: 2.2.0.0
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
Я думаю, что у вас есть какая-то ошибка в провайдере.net. Я не смог воспроизвести его, используя ваш код (с немного поддельным запросом), но у меня есть серверная часть UniVerse, и хотя они очень похожи, они, безусловно, являются отличиями.
Тем не менее, согласно заявлению Rocket об использовании UniDataSQL, синтаксис, который ДОЛЖЕН работать, - это то, что вы, по-видимому, попробовали первыми.
select ID, ID NewID from SYS_INSTALL_HISTORY_NF where 1=0
"Column0" мне кажется странным, так как он, скорее всего, исходит от самого провайдера.net, а не от UniData. Как будто запрос определил, сколько столбцов будет, но еще не присвоил им имена. Если бы это было правдой, я бы ожидал, что запрос просто потерпит неудачу и будет выдано исключение. Вы не делаете никаких других исключений, ловящих на фактическом вызове, не так ли? Вы пробовали это с колонкой без идентификатора?
Вы можете обойти все это, добавив еще один элемент словаря, но это кажется тяжелым для чего-то, что должно работать. Я хотел бы поддержать это и посмотреть, что они думают.
Удачи.