我有以下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'
答案 0 :(得分:1)
如何重新编写语句,使语句保留在其中(选择 来自[国家/地区]的CountryCodeTwoChar(按CountryName排序)?
这是不可能的。您无法在派生表中使用该确切语句。如果您无法更改它,那您就不走运了。
如果您能够为一个解决方案编写多个语句,则只要使用上面的确切语句,就可以使用该语句填充一个表变量,然后使用WHERE子句从该表变量中进行选择。 / p>
答案 1 :(得分:1)
是的。您的解决方法很好。在这种情况下,优化器将简单地忽略order by
的使用,因为关系数据库中的表本质上未排序-这正是为什么不允许您在派生表或表中指定order by
的原因视图中也未指定top
或for xml
(我猜是在更高版本的for json
或offset...fetch
中,但太忙/懒惰以至于无法立即检查)。
答案 2 :(得分:-1)
尝试在子选择中添加TOP 100%,这应该会有所帮助。
Select CountryCodeTwoChar
FROM (Select TOP 100 PERCENT
CountryCodeTwoChar From [Country]
Order By CountryName ) TBL
Where CountryCodeTwoChar = N'PS'