Ich habe ein Skript, das die folgende gespeicherte Prozedur erstellt:LAG ist kein in Funktionsnamen gebaut erkannte
CREATE PROCEDURE [dbo].[GetDurationFree]
@EquipmentName varchar(50)
AS
UPDATE dbo.EquipmentMessages
SET UnlockDuration = (SELECT DATEDIFF (SECOND,
(SELECT TOP 1 LAG(TimeUnlock) OVER (ORDER BY TimeUnlock) TimeUnlock
FROM dbo.EquipmentMessages
WHERE EquipmentName = @EquipmentName
ORDER BY TimeLock DESC),
(SELECT TOP 1 TimeLock FROM dbo.EquipmentMessages
WHERE EquipmentName = @EquipmentName
ORDER BY TimeLock DESC)))
WHERE TimeLock = (SELECT MAX(TimeLock) FROM dbo.EquipmentMessages
WHERE EquipmentName = @EquipmentName);
Das einzige Problem ist, dass es ein Lag verwendet, wenn ich versuche, ihn auszuführen erhalte ich die folgende Fehler:
Msg 195, Ebene 15, Status 10, Verfahren GetDurationFree, Line 6
'LAG' ist der Name keine anerkannte integrierte Funktion.Nachricht 156, Ebene 15, Status 1, Prozedur GetDurationFree, Zeile 12
Falsche Syntax neben dem Schlüsselwort 'ORDER'.
Ich las online und schlug jemand vor, die folgenden:
ALTER DATABASE yourDBName
SET COMPATIBILITY_LEVEL = 110
Jedoch, wenn ich dieses laufen lasse, erhalte ich folgende Fehlermeldung:
Msg 15048, Ebene 16, Status 1, Zeile 1
Gültige Werte der Datenbankkompatibilitätsstufe sind 80, 90 oder 100.
Ich betreibe
SQL Server 2014 Management Studio, die Express-Version
Allerdings, wenn ich die folgende SELECT @@version
gebe ich bekommen:
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)
Mar 29 2009 10:11:52
Copyright (c) 1988-2008 Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Sie können SQL Server 2014 für SSMS ausführen, aber die Datenbank, mit der Sie kommunizieren, ist SQL Server 2008. –
Nur bearbeitet und Sie haben Recht, es ist 2008, wie kann ich das ändern? – George
'LAG' ist eine ** neue Funktion ** in der SQL Server ** 2012 ** - Engine - da Sie gegen eine Version von 2008 laufen, kann diese Funktion nicht verwendet werden. –