0

我目前正在处理一个相当长且复杂的 SQL 查询。

我想要做的只是添加LIMIT 10......但是每次我将它结束到查询的末尾时,我都会遇到错误。

任何帮助都会很棒,查询如下:

sqlQuery = "
  select      DATENAME(Month,i.Datecreated) + ' ' + 
              DATENAME(day,i.Datecreated) + ' ' + 
              DATENAME(year,i.Datecreated) AS USDateCreated,
              i.imageId,
              GalleryName,Fullpath,MediumPath,ThumbPath,ViewCounter,
              i.DateCreated,ItemNumber,Gender,Minutes,
              right(convert(varchar(3), 100 + Seconds),2) as Seconds,
              FramesPerSecond,WeekNumber,Filename,
              (round(cast(Size as Decimal(16,2))/1024,2)) as Size,
              FlvFilename,FlvSize,NumberOfMovies,
              Free,Comment,
              (case when sum(rating)/count(i.imageId) is null then 0 else sum(rating)/count(i.imageId) end) as ratingResult, 
              dbo.getTagNames(i.imageid) as tagsname,'' as yourTagNames,
              dbo.getTagNames(i.imageid) as memberTagNames,max(weekNumber)-1 as lastWeek 

  from        images as i 

  left join   Imagerating as ir on i.imageId = ir.imageId

  left join   tag as t on i.imageId = t.imageId where 1=1 

  and         galleryName = 'pictures' 

  and         weekNumber = '4' 

  group by    i.imageId,GalleryName,Fullpath,MediumPath,ThumbPath,
              ViewCounter,i.DateCreated,ItemNumber,Gender,Minutes,Seconds,
              FramesPerSecond,WeekNumber,Filename,Size,FlvFilename,FlvSize,
              NumberOfMovies,Free,Comment 

  order by    filename
"
4

3 回答 3

7

T-SQL 不支持LIMIT. 相反,TOP请在您的SELECT:

SELECT TOP 100 -- Rather than LIMIT 100 at the bottom
    Field1, Field2 -- etc.
FROM YourTable
GROUP BY Field1
ORDER BY Field2

如果您使用的是 SQL Server 2012 或更高版本,您可以使用OFFSETFETCH [FIRST|NEXT]来获得LIMIT对结果集进行分页的能力。

于 2013-09-17T02:11:49.807 回答
1

LIMIT 在 Sql Server 中不起作用。它是标准 SQL 的 MySql 专有扩展。在 Sql Server 中,您可以将 simpleTOP n用于第一页,但如果您尝试进行分页,这也不是一个好的选择。

幸运的是,更新版本的 SQL 标准指定了可用于分页的语法,如果您有幸使用 Sql Server 2012 或更高版本,则可以使用它。它被称为OFFSET/FETCH,它看起来像这样:

SELECT <columns> FROM <table> ORDER BY <order> OFFSET 30 ROWS FETCH NEXT 15 ROWS ONLY;

如果页面大小为 15,则将获取第3页。请注意,需要 ORDER BY 子句。否则,偏移量没有意义。这是标准的 sql。不仅 Sql Server 支持它,Oracle、PostGre 和其他一些也支持,随着时间的推移,您可以导出更多。

于 2013-09-17T03:12:07.050 回答
1

在 TSQL 中,要使用的函数是 TOP,而不是 LIMIT:

SELECT TOP 10 * FROM Table
于 2013-09-17T02:11:57.960 回答