为什么SQL Server 2000对待SELECT test.*和SELECT t.est.*相同?

Chr*_*tal 22 t-sql sql-server-2000

我在SQL Server 2000中查找了一个查询,并在表名的中间添加了一个句点:

SELECT t.est.* FROM test
Run Code Online (Sandbox Code Playgroud)

代替:

SELECT test.* FROM test
Run Code Online (Sandbox Code Playgroud)

并且查询仍然完美执行.甚至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
Run Code Online (Sandbox Code Playgroud)

Mar*_*las 4

也许表名是由前缀和基本名称的简单串联构成的。

't' + 'est' == 'test'
Run Code Online (Sandbox Code Playgroud)

也许在 SQL Server 的更高版本中,这种区别变得更加语义化/更加严格。

{ owner = t, table = est } != { table = test }
Run Code Online (Sandbox Code Playgroud)