偏移量提取不起作用怎么办?

时间:2018-09-20 07:14:07

标签: sql sql-server tsql

请帮助我,我认为它的语法正确。 但是为什么它警告我在SQL Server 2017中不正确

writer.WritePropertyName("acl_entries");
jsonWriter.WriteStartArray();

for (int row = 0; row <= author.acl_entries.Count; row++)
{        
    jsonWriter.WriteStartObject();  

    jsonWriter.WritePropertyName("stakeholder_id");
    jsonWriter.WriteValue(author.acl_entries[row].stakeholder_id);

    jsonWriter.WritePropertyName("stakeholder_name");
    jsonWriter.WriteValue(author.acl_entries[row].stakeholder_name);

    jsonWriter.WritePropertyName("stakeholder_type_id");
    jsonWriter.WriteValue(author.acl_entries[row].stakeholder_type_id);
    jsonWriter.WriteEndObject();

}

jsonWriter.WriteEndArray();

1 个答案:

答案 0 :(得分:1)

OFFSET的语法为OFFSET {Rows} ROWS。您缺少ROWS关键字。

这不是您的SQL,因为它是一张图片,但是,伪SQL中的正确语法是(但是我没有按照JohnyL的评论在图片中回答):

SELECT {Your Coloumns}
FROM YourTable YT
ORDER BY {Order Columns}
OFFSET @OffSetVar ROWS --You're missing ROWS
FETCH FIRST @FirstVar ROWS ONLY;
--Above could also be replaced with (they are semantically the same)
--FETCH NEXT @NextVAR ROWS ONLY;

文档中有一个很好的例子:Specifying expressions for OFFSET and FETCH values

帖子中的SQL不会产生错误:

CREATE TABLE #TD_TD(Request int);
INSERT INTO #TD_TD (Request)
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
       (11),(12),(13),(14),(15),(16),(17),(18),(19),(20),
       (21),(22),(23),(24),(25),(26),(27),(28),(29),(30);


SELECT Request  
FROM #TD_TD  
ORDER BY Request  
OFFSET 1 ROWS    
FETCH NEXT 20 ROWS ONLY;
GO

DROP TABLE #TD_TD;

这将返回值2-21