在Microsoft SQL Server 2008中,语法生成错误“未启用并行数据仓库(PDW)功能”。


8

我有以下虚拟列是通过排序分区上的聚合生成的,

MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )

但是,当我执行该操作时,会得到以下结果。

Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.

尽管这是有趣的地方,但在分区上没有排序顺序,但它的工作原理是:

MIN(picture_id) OVER ( PARTITION BY [360_set] )

而且,ROW_NUMBER()窗口函数(不是聚合函数)在分区上以显式顺序工作。

ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )

为什么所需的语句不起作用?这在哪里记录?请求了版本信息,这是我在“帮助”→“关于”中的内容。

Microsoft SQL Server Management Studio          10.0.5512.0
Microsoft Analysis Services Client Tools        10.0.5500.0
Microsoft Data Access Components (MDAC)         6.1.7601.17514
Microsoft MSXML                                 3.0 6.0 
Microsoft Internet Explorer                     9.10.9200.16635
Microsoft .NET Framework                        2.0.50727.5472
Operating System                                6.1.7601

结果SELECT @@VERSIONMicrosoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)


确切的版本是什么?好像是个错误。我在10.50.1600的第一个示例中遇到了正常的语法错误。但是除此之外,我看不到要点-您打算使用这种语法做什么?
乔恩·塞格尔

那么,您实际上是否关心按划分分区[360_set],还是那部分无关紧要?另外,根据您的评论,如果序列中没有空格,则您给出的公式只能像文本说明一样工作。你要哪个?
乔恩·塞格尔

2
直到SQL Server 2012才实现聚合的order by子句。不确定什么是PDW扩展名。
马丁·史密斯

2
@JonSeigel设置窗口框架的行顺序。MIN当然,它不会影响工作方式,但是会更改框架中MIN要执行的行。
保罗·怀特9

1
@JonSeigel-如果未指定,则默认值为RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。因此,该窗口仅包含其picture_id值小于或等于当前行中的值的值。
马丁·史密斯

Answers:


16

未启用并行数据仓库(PDW)功能。

这是仅在SQL Server 2008中存在的解析器错误。2012年之前的SQL Server的非PDW版本不支持ORDER BY具有聚合功能的子句,例如MIN

图书在线摘录

与从SQL Server 2005开始可用的基本实现相比,2012年窗口功能支持得到了很大的扩展。这些扩展在合并到盒装产品中之前已在Parallel Data Warehouse中提供。由于各个版本共享一个通用的代码库,因此可能会产生误导性的错误消息。

如果您感兴趣,解析器验证聚合后的调用堆栈如下所示。因为集合中有一个OVER带有的子句,所以将对ORDER BYPDW进行检查:

汇总验证

该检查立即失败,并出现解析器错误:

解析器错误

幸运的是,您不需要支持ORDER BY框架的窗口聚合即可解决代码问题。


2

这将是PDW,Azure和Box版本的代码库合并的结果。尝试执行仅在Azure中发布的内容时,我们将开始看到类似或您不在Azure计算机上的消息。

关于Martin关于PDW扩展是什么的问题,这些将是T-SQL语言的功能,这些功能仅在并行数据仓库(PDW)产品中实现。


可以通过黑客启用这些功能吗?还是不随产品一起提供?我只是想知道他们是否认真考虑了这个基本功能?数据库使用并不那么复杂。
埃文·卡罗尔

3
@EvanCarroll否,ORDER BY无法在SQL Server 2008中启用带有窗口聚合的功能。该功能未“拉动”,直到2012年版本才针对非PDW SQL Server发布。
保罗·怀特9

1

将其作为错误消息的一个元素来回答。正如@MartinSmith所说,

直到SQL Server 2012才实现聚合的order by子句。不确定什么是PDW扩展名。– 马丁·史密斯

这是在此处正式提到的SQL Server 2008 R2-OVER子句(Transact-SQL)

在排序窗口函数的上下文中使用时,只能引用FROM子句提供的列。无法指定整数来表示选择列表中列的名称或别名的位置。不能与聚合窗口函数一起使用。

更重要的是SQL Server 2012中的Verbiage -OVER子句(Transact-SQL)

根据与OVER子句一起使用的排名,聚合或分析功能,和/或可能不支持。

因此,看起来它肯定在2008年不可用-尽管该错误消息是一种非常晦涩的说法“未实现”,而在2012年,看起来微软的官方立场是您的努力可能会有所不同

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.