在视图中保持ORDER BY子句无效

时间:2018-11-27 15:42:49

标签: sql sql-server

我有以下SQL语句:

Select CountryCodeTwoChar
FROM (Select CountryCodeTwoChar From [Country] Order By CountryName ) TBL
Where CountryCodeTwoChar = N'PS'

但是我在SQL Server中遇到以下错误:

  

ORDER BY子句在派生的视图,内联函数中无效   表,子查询和公用表表达式,除非TOP或FOR   还指定了XML。

我知道它给了声明错误:

Select CountryCodeTwoChar From [Country] Order By CountryName

但这是系统自动生成的,因此我无法更改!

如何重新编写保留该语句的语句(从[Country]按CountryName选择CountryCountTwoChar)?

{编辑}

我尝试了以下方法,对吗?

declare @userData TABLE(
                    CountryCodeTwoChar varchar(30) NOT NULL
                   )
Insert into @userData
Select CountryCodeTwoChar From [Country] Order By CountryName

Select CountryCodeTwoChar FROM @userData Where CountryCodeTwoChar = N'PS'

3 个答案:

答案 0 :(得分:1)

  

如何重新编写语句,使语句保留在其中(选择   来自[国家/地区]的CountryCodeTwoChar(按CountryName排序)?

这是不可能的。您无法在派生表中使用该确切语句。如果您无法更改它,那您就不走运了。

如果您能够为一个解决方案编写多个语句,则只要使用上面的确切语句,就可以使用该语句填充一个表变量,然后使用WHERE子句从该表变量中进行选择。 / p>

答案 1 :(得分:1)

是的。您的解决方法很好。在这种情况下,优化器将简单地忽略order by的使用,因为关系数据库中的表本质上未排序-这正是为什么不允许您在派生表或表中指定order by的原因视图中也未指定topfor xml(我猜是在更高版本的for jsonoffset...fetch中,但太忙/懒惰以至于无法立即检查)。

答案 2 :(得分:-1)

尝试在子选择中添加TOP 100%,这应该会有所帮助。

Select CountryCodeTwoChar
FROM (Select TOP 100 PERCENT 
CountryCodeTwoChar From [Country] 
Order By CountryName ) TBL
Where CountryCodeTwoChar = N'PS'