LAG 不是公认的内置函数名称
Posted
技术标签:
【中文标题】LAG 不是公认的内置函数名称【英文标题】:LAG is not a recognized built in function name 【发布时间】: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 管理工具)并针对该实例运行
【参考方案1】:
我最终做的是进入卸载程序下的控制面板并删除与 SQL 相关的所有内容。然后我重新安装了程序,它工作正常。
我注意到计算机上没有安装 2008 的早期版本。也许问题出在那儿。
【讨论】:
【参考方案2】:您需要兼容级别为 110 的 SQL Server 2012 数据库才能使用 LAG 功能。
ALTER DATABASE DBName
SET COMPATIBILITY_LEVEL = 110
【讨论】:
以上是关于LAG 不是公认的内置函数名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2012 中使用 TRUNC 函数,因为我得到 'TRUNC' 不是一个公认的内置函数名称。'?
sql server 中 使用lead() over()函数报错:lead无法识别的内置函数。
为啥在sql sever中使用first和last函数查询,提示‘first’'last' 不是可以识别的 内置函数名称。