这个特殊的别名 SQL 列是不是有问题?

Posted

技术标签:

【中文标题】这个特殊的别名 SQL 列是不是有问题?【英文标题】:Is there something problematic about this particular aliased SQL column?这个特殊的别名 SQL 列是否有问题? 【发布时间】:2012-07-10 21:59:33 【问题描述】:

为什么在 select 语句中使用别名时会被视为外星人?

我无法想象总是这样,但我不得不更改这段代码:

const string query = 
    @"SELECT C.PLATYPUSCLIENTID, E.DEWDROPNAME FOGGY
    FROM DUCKBILLACCOUNT B,
        PLATYPUSCLIENT C,
        ENTITY E
    WHERE B.DUCKBILLNUMBER = :PLATYPUSACCOUNTID
        AND B.DUCKBILLACCOUNTABCID = C.DUCKBILLACCOUNTABCID
        AND C.PLATYPUSCLIENTABCID = E.ABCID
    ORDER BY FOGGY, PLATYPUSCLIENTID";
    try 
        oc.Open();
        using (OracleCommand ocmd = new OracleCommand(query, oc)) 
            ocmd.Parameters.Add("PLATYPUSACCOUNTID", PLATYPUSACCOUNTID);
            using (OracleDataReader odr = ocmd.ExecuteReader()) 
                while (odr.Read())  . . .

...到这个:

const string query = 
    @"SELECT C.PLATYPUSCLIENTID, E.DEWDROPNAME 
    FROM DUCKBILLACCOUNT B,
        PLATYPUSCLIENT C,
        ENTITY E
    WHERE B.DUCKBILLNUMBER = :PLATYPUSACCOUNTID
        AND B.DUCKBILLACCOUNTABCID = C.DUCKBILLACCOUNTABCID
        AND C.PLATYPUSCLIENTABCID = E.ABCID
    ORDER BY DEWDROPNAME, PLATYPUSCLIENTID";
    try 
        oc.Open();
        using (OracleCommand ocmd = new OracleCommand(query, oc)) 
            ocmd.Parameters.Add("PLATYPUSACCOUNTID", PLATYPUSACCOUNTID);
            using (OracleDataReader odr = ocmd.ExecuteReader()) 
                while (odr.Read())  . . .

...让它在运行时返回 vals(我在第一个版本中得到“IndexOutOfRangeException”)

【问题讨论】:

您的查询是否在 SQL Developer 中根据需要针对数据库运行?我记得之前需要使用AS 关键字,但我不记得Oracle SQL 引擎是否期望它。 @Jesse:我不知道 SQL Developer 是什么,但它在 TOAD 中运行良好 SQL Developer 是 Oracle 用于数据库管理的 GUI 工具。它类似于 Microsoft 针对 SQL Server 的 SSMS。 oracle.com/technetwork/developer-tools/sql-developer/overview/… 【参考方案1】:

您需要引用别名。

E.DEWDROPNAME 'FOGGY' ...

【讨论】:

以上是关于这个特殊的别名 SQL 列是不是有问题?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:基于两列返回特殊计数列

SQL 加载数据特殊字符

sql 更新特殊值时更新所有列

如何在 Access SQL 的列别名中使用表名?

Azure SQL 处理特殊字符

特殊字符、sql、csv、phpmyadmin、excel