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 以降を使用している場合はOFFSET、 とFETCH [FIRST|NEXT]LIMITを使用して、結果セットをページングする機能を取得できます。

于 2013-09-17T02:11:49.807 に答える
1

TSQL では、使用する関数は LIMIT ではなく TOP です。

SELECT TOP 10 * FROM Table
于 2013-09-17T02:11:57.960 に答える
1

LIMIT は Sql Server では機能しません。これは、標準 SQL に対する MySql 独自の拡張機能です。Sql Server ではTOP n、最初のページに simple を使用できますが、ページネーションを行おうとしている場合には、それは実際には良い選択ではありません。

幸いなことに、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 に答える