我目前正在处理一个相当长而复杂的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
"
答案 0 :(得分:6)
T-SQL不支持LIMIT
。相反,请在SELECT
中使用TOP
:
SELECT TOP 100 -- Rather than LIMIT 100 at the bottom
Field1, Field2 -- etc.
FROM YourTable
GROUP BY Field1
ORDER BY Field2
如果您使用的是SQL Server 2012或更高版本,则可以使用OFFSET
and FETCH [FIRST|NEXT]
获取LIMIT
浏览结果集的功能。
答案 1 :(得分:1)
在TSQL中,使用的函数是TOP,而不是LIMIT:
SELECT TOP 10 * FROM Table
答案 2 :(得分:1)
LIMIT在Sql Server中不起作用。它是标准SQL的MySql专有扩展。在Sql Server中,您可以使用简单的TOP n
作为第一页,但如果您尝试进行分页,那么这不是一个好的选择。
幸运的是,SQL标准的更新版本指定了可用于分页的语法,如果您很幸运能够使用Sql Server 2012或更高版本,则可以使用它。它被称为OFFSET/FETCH,它看起来像这样:
SELECT <columns> FROM <table> ORDER BY <order> OFFSET 30 ROWS FETCH NEXT 15 ROWS ONLY;
如果页面大小为15,则会获取 3rd 页面。请注意,ORDER BY子句是必需的。否则,偏移没有意义。这是标准sql 。 Sql Server不仅支持它,而且Oracle,PostGre和其他一些产品也支持它,并且您可以随着时间的推移导出更多。