【问题标题】:Cursor vs. set-based solutions for data manipulation tasks用于数据操作任务的光标与基于集合的解决方案
【发布时间】:2014-04-03 18:49:36
【问题描述】:

我正在阅读考试 70-461 Querying SQL Server 2012 的培训工具包。

第 604 页给出了一个示例,我正在对其进行测试,但它不起作用...有什么建议吗?

示例:

IF OBJECT_ID(N'dbo.GetNums', N'IF') IS NOT NULL DROP FUNCTION  dbo.GetNums;
GO

CREATE FUNCTION dbo.GetNums (@low as bigint, @high as bigint) RETURNS TABLE
AS
RETURN
WITH
    L0 as (SELECT c from (VALUES(1), (1)) as D(c)),
    L1 as (SELECT 1 as c FROM L0 as A CROSS JOIN L0 AS B),
    L2 as (SELECT 1 as c FROM L1 as A CROSS JOIN L1 AS B),
    L3 as (SELECT 1 as c FROM L2 as A CROSS JOIN L2 AS B),
    L4 as (SELECT 1 as c FROM L3 as A CROSS JOIN L3 AS B),
    L5 as (SELECT 1 as c FROM L4 as A CROSS JOIN L4 AS B),
    Nums as (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as rownum
            FROM L5)
SELECT @low + rownum - 1 as n
FROM Nums
ORDER BY rownum
OFFSET 0 ROWS 
FETCH FIRST @high - @low + 1 ROWS ONLY;
GO

错误信息:

消息 102,级别 15,状态 1,过程 GetNums,第 17 行
“OFFSET”附近的语法不正确。
消息 153,级别 15,状态 2,过程 GetNums,第 18 行
FETCH 语句中选项 FIRST 的使用无效。

【问题讨论】:

  • 我猜你这里没有针对 SQL Server 2012 引擎运行 - SELECT @@VERSION 的结果是什么? OFFSET & FETCH是2012版的新功能
  • 糟糕.. Microsoft SQL Server 2008 R2 (RTM).. 谢谢! :)

标签: sql sql-server-2012


【解决方案1】:

上面的代码在 SQL Server 2008 R2 中运行时会产生错误消息,但在 SQL Server 2012 中运行成功。

OFFSET 和 FETCH 是 new features in 2012

【讨论】:

  • 正在运行 Microsoft SQL Server 2008 R2 (RTM)。谢谢! :)
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 2013-11-06
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多