【发布时间】:2016-07-12 20:43:49
【问题描述】:
我有一个创建以下存储过程的脚本:
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);
唯一的问题是它使用了延迟,当我尝试执行它时,我收到以下错误:
消息 195,级别 15,状态 10,过程 GetDurationFree,第 6 行
“LAG”不是可识别的内置函数名称。消息 156,级别 15,状态 1,过程 GetDurationFree,第 12 行
关键字“ORDER”附近的语法不正确。
我正在网上阅读,有人提出以下建议:
ALTER DATABASE yourDBName
SET COMPATIBILITY_LEVEL = 110
但是,当我运行它时,我收到以下错误:
消息 15048,第 16 级,状态 1,第 1 行
数据库兼容级别的有效值为 80、90 或 100。
我在跑步
SQL Server 2014 Management Studio,快速版
但是当我输入以下SELECT @@version
我明白了:
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)
【问题讨论】:
-
您可能正在为 SSMS 运行 SQL Server 2014,但您正在与之通信的数据库是 SQL Server 2008。
-
刚刚编辑,你们是对的,现在是 2008 年,我该如何更改?
-
LAG是 SQL Server 2012 引擎中的新函数 - 因为您运行的是 2008 版本,所以不能使用此函数用过。 -
@George 您需要升级服务器软件。
-
只需在您的计算机上安装更新版本的 SQL Server 数据库引擎(不仅仅是 GUI 管理工具)并针对该实例运行
标签: sql-server window-functions