Ich habe die folgende virtuelle Spalte aus einem Aggregat über eine sortierte Partition generiert:
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Wenn ich das jedoch ausführe, erhalte ich Folgendes.
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
Hier wird es jedoch interessant, ohne eine Sortierreihenfolge auf der Partition funktioniert es:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Außerdem arbeitet ROW_NUMBER()
eine Fensterfunktion (keine Aggregatfunktion) mit einer expliziten Reihenfolge auf der Partition.
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Wie kommt es, dass die gewünschte Aussage nicht funktioniert? Wo ist das dokumentiert? Die Versionsinformationen wurden angefordert, dies ist, was ich in Hilfe → Über.
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
Das Ergebnis von SELECT @@VERSION
istMicrosoft 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)
quelle
[360_set]
, oder ist dieser Teil irrelevant? Aus Ihrem Kommentar geht hervor, dass die von Ihnen angegebene Formel nur dann wie die Textbeschreibung funktioniert, wenn die Sequenz keine Lücken aufweist. Welche wollen Sie?MIN
, ändert jedoch die Zeilen in dem Frame, über den ausgeführtMIN
wird.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Das Fenster enthält also nur Werte mitpicture_id
Werten, die kleiner oder gleich denen in der aktuellen Zeile sind.Antworten:
Dies ist ein Parser-Fehler, der nur in SQL Server 2008 auftritt. Nicht-PDW-Versionen von SQL Server vor 2012 unterstützen die
ORDER BY
Klausel mit Aggregatfunktionen wieMIN
:Die Unterstützung von Fensterfunktionen wurde 2012 im Vergleich zu der ab SQL Server 2005 verfügbaren Basisimplementierung erheblich erweitert. Die Erweiterungen wurden in Parallel Data Warehouse verfügbar gemacht, bevor sie in das Box-Produkt integriert wurden. Da die verschiedenen Editionen eine gemeinsame Codebasis haben, sind irreführende Fehlermeldungen wie diese möglich.
Wenn Sie interessiert sind, wird der Aufrufstapel, wenn das Aggregat vom Parser überprüft wird, unten angezeigt. Da das Aggregat eine
OVER
Klausel mit enthältORDER BY
, wird eine Prüfung auf PDW ausgestellt:Diese Prüfung schlägt sofort mit einem Parserfehler fehl:
Glücklicherweise benötigen Sie kein Fensteraggregat, das
ORDER BY
Framing unterstützt , um Ihr Codeproblem zu lösen.quelle
Dies wird ein Ergebnis der Zusammenführung der Codebasen der PDW-, Azure- und Box-Version sein. Es werden Nachrichten wie diese angezeigt oder dass Sie sich nicht auf einem Azure-Computer befinden, wenn Sie versuchen, Dinge zu tun, die nur in Azure veröffentlicht wurden.
Bei Martins Frage nach den PDW-Erweiterungen handelt es sich um die Funktionen der T-SQL-Sprache, die nur im PDW-Produkt (Parallel Data Warehouse) implementiert sind.
quelle
ORDER BY
mit Fensteraggregaten kann in SQL Server 2008 nicht aktiviert werden. Die Funktion wurde nicht "gezogen", sondern erst mit der Version 2012 für Nicht-PDW-SQL Server freigegeben.Beantwortung als Element der Fehlermeldung. Wie @MartinSmith oben sagte,
Dies wird hier offiziell erwähnt. SQL Server 2008 R2 - OVER-Klausel (Transact-SQL)
Noch wichtiger ist die Aussprache in SQL Server 2012 - OVER-Klausel (Transact-SQL)
Es sieht also so aus, als ob es 2008 sicherlich nicht verfügbar ist - obwohl diese Fehlermeldung eine wirklich dunkle Art ist, "nicht implementiert" zu sagen , und 2012 sieht es so aus, als ob die offizielle Haltung von Microsoft darin besteht, dass Ihr Kilometerstand variieren kann .
quelle