我有一个脚本,它创建以下存储过程:
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);唯一的问题是它使用滞后,当我试图执行它时,我会得到以下错误:
Msg 195,15级,状态10,过程GetDurationFree,第6行 ‘'LAG’不是一个公认的内置函数名. Msg 156,15级,状态1,过程GetDurationFree,第12行 关键字“ORDER”附近的语法不正确。
我在网上阅读,有人建议如下:
ALTER DATABASE yourDBName
SET COMPATIBILITY_LEVEL = 110但是,当我运行这个程序时,我会得到以下错误:
Msg 15048,16级,状态1,第1行 数据库兼容性级别的有效值为80、90或100。
我在跑步
SQLServer2014ManagementStudio,快速版本
但是,当我输入以下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)发布于 2016-07-13 21:01:54
我最后所做的是进入控制面板,卸载一个程序并删除与SQL相关的所有内容。然后我安装了这个程序,它运行得很好。
我注意到2008年的早期版本还没有安装在电脑上。也许问题就出在那里。
发布于 2018-09-27 20:36:07
您需要SQL Server 2012数据库,其可压缩级别为110,才能使用延迟函数。
ALTER DATABASE DBName
SET COMPATIBILITY_LEVEL = 110https://stackoverflow.com/questions/38338569
复制相似问题