"DERIVEDTBL": SQL Server 保留关键字 ?

今天在 MS SQL Server 2000 Enterprise Manager 的 SQL 窗格中调试如下 SQL 语句:

SELECT TOP 10 *
        FROM (SELECT TOP 20 *
                FROM news
                WHERE class = 001
                ORDER BY pubdate DESC)
        ORDER BY pubdate

发现 SQL 窗格执行后在将原始的 SQL 改动了,自动增加了一个  DERIVEDTBL ,变成如下这样了:

SELECT TOP 10 *
        FROM (SELECT TOP 20 *
                FROM news
                WHERE class = 001
                ORDER BY pubdate DESC) DERIVEDTBL 
        ORDER BY pubdate

这个 DERIVEDTBL 还真让我费了一点劲,以为是新的保留关键字,可是在 SQL Server 的 Online Help 中没有找到,在 Google 也没找着这个单词的解释。

后来无意中把 DERIVEDTBL 改成 Temp 发现也能用,汗~~~,原来是 SQL 窗格只是给子查询增加了一个别名而已。

唉,真是吃了没文化的亏了,谁让咱 SQL Server 学/用得少呢。

建议把这个作为招聘 SQL Server 相关人员的一个面试题。

“"DERIVEDTBL": SQL Server 保留关键字 ?”的22个回复

  1. 只能说你对sql了解太少了。
    在db2 7.2里面,如果子查询不加别名的话就会出错。
    ms sql里面只是自动给你加上了。

  2. 也只会在 SQL Server 的 Enterprise Manager 的 SQL 窗格中才会这样,如果是在 Query Analyser 中,你如果不加别名,会被认为是不合法的查询语句。看来你平时不怎么用 MS SQL Server 吧?

  3. 今天我碰到一样的问题
    和你写了一样的SQL,为了实现SQL分页
    不知这样来回倒序会不会影响效率,和用主键查哪个效率更高

  4. 刚才没说清楚,如果记录非常多的话,这两种方法哪个消耗的资源会更少呢
    SELECT TOP 10 *
    FROM news
    WHERE (PK IN
    (SELECT TOP 20 PK
    FROM news
    where class = 001
    ORDER BY pubdate DESC))
    ORDER BY pubdate

    这个会不会特别大SELECT TOP 20 * FROM news WHERE class = 001 ORDER BY pubdate DESC

    SELECT TOP 10 *
    FROM (SELECT TOP 20 *
    FROM news
    WHERE class = 001
    ORDER BY pubdate DESC)
    ORDER BY pubdate

  5. 说得不错,我在用SQL的嵌套查询语句,每次自动加个DERIVEDTBL,却不懂什么意思,GOOGLE上找了找,就找到这里来了。现在是明白了,我是小菜鸟

  6. 汗!!!
    用了两年了,今天才知道,不过是知道以后才看到这个帖子的。早看到就好了

评论已关闭。