【发布时间】:2012-06-06 00:34:24
【问题描述】:
我在 Sql Server (2008) 中提交以下查询
WITH query AS (SELECT TOP 100 PERCENT
ROW_NUMBER() OVER
(ORDER BY [tbl2].[col2] ASC) AS TableRowNumber ,
[tbl1].[col1] ,
[tbl2].[col2]
FROM [db1].[dbo].[tbl1] AS [tbl1]
JOIN [db2].[dbo].[tbl2] AS [tbl2]
ON [tbl1].[id] = [tbl2].[id])
SELECT
*
FROM query
WHERE TableRowNumber BETWEEN 1 AND 15
ORDER BY TableRowNumber ASC
运行此查询时,它会返回以下错误消息:
Msg 207, Level 16, State 1, Line 3
Invalid column name 'col2'.
sql 连接本身运行良好(当作为普通查询运行时。问题似乎出在 COLUMN 与查询的 FROM 表位于不同的数据库中时使用 Row_Number() over (Order By COLUMN)。
如果我将第 3 行更改为 (Order By [tbl1].[col1] ASC),那么它运行时不会出现任何问题。仅当排序列位于不同的数据库中时才会发生该错误。
有人知道为什么会这样吗?有关如何解决此问题的任何建议?
【问题讨论】:
-
我似乎无法重复这一点
-
我看到了同样的事情。 Yaakov,当您完全省略
ROW_NUMBER()部分时会发生什么? (我敢打赌,您在第 4 行或第 5 行仍然会得到一个无效的列)。TOP 100 PERCENT的目的到底是什么? -
也许我没有明白这一点,但是有什么特殊原因你不能在 FROM-JOIN 子句中简单地将 tbl1 与 tb2 切换?
-
我知道您已经说过联接有效,但您确定 [db2].[dbo].[tb2] 不应该是 [db2].[dbo].[tbl2]
-
如果我的 Order By 子句中的列名不存在于表中,我可以重现这种情况的绝对唯一方法
标签: sql-server sql-server-2008 tsql row-number