【发布时间】:2011-02-27 19:52:42
【问题描述】:
我在 SQL Server 2000 中进行了一个查询,并在表名中间添加了一个句点:
SELECT t.est.* FROM test
代替:
SELECT test.* FROM test
查询仍然完美执行。即使SELECT t.e.st.* FROM test 执行也没有问题。
我在 SQL Server 2008 中尝试了相同的查询,但查询失败(错误:列前缀与查询中使用的表名或别名不匹配)。出于纯粹的好奇,我一直试图弄清楚 SQL Server 2000 是如何处理表名的,这种方式可以让粗略的查询运行,但到目前为止我还没有多少运气。
任何 sql 专家都知道为什么 SQL Server 2000 运行查询没有问题吗?
更新:无论使用何种界面(例如企业管理器、SSMS、OSQL),查询似乎都能正常工作,正如Jhonny 在下面指出的那样,它甚至在您尝试时也能正常工作:
SELECT TOP 1000 dbota.ble.* FROM dbo.table
【问题讨论】:
-
如果我不得不冒险猜测是因为 SQL 将您的查询作为建议。为了确保以最有效的方式返回结果,它会查看您的查询并对其进行更改以使其更好地工作。在您的示例中,别名并不重要,因为它是 * FROM 表......虽然我无法证明这一点(因此评论而不是回答)您可以尝试进行连接,以便您有 2 个表并像那样测试它吗?如果有可能产生歧义,它可能会开始更加关心。
-
你现在也让我好奇了!我手头没有 SQL Server 2000 实例,但我很感兴趣...
-
@Shaded,我认为您可能已经找到了解决方案,但即使查询中存在多个表,它似乎也可以工作。此查询也可以正常工作:
SELECT t.est.*, t.est2.* FROM test, test2。我还尝试在内部加入几个表以确保运行良好。 -
我发现了一个中断的情况 - 如果您合法地拥有一个具有给定名称的对象(例如名为 t.est 的表),请在您的查询中引用它,但为它取别名,您现在得到预期的“无效的对象名称”
-
Even SELECT TOP 1000 dbota.ble.* FROM dbo.table 工作,UFF 令人惊叹
标签: tsql sql-server-2000