Hej! Tabellen ser ut så här: För det första så kan en rad i din tabell bli större än 8060 bytes som är max, har du tänkt på det? Om man försöker lägga in mer än vad som får plats så får man ett felmeddelande.Intervall hantering i sql
Jag har en tabell som heter Nyheter som innehåller logiskt nog nyheter. På websidan vill jag endast visa 15 nyheter åt gången. De resterande nyheterna ska man komma åt genom att klicka på länken som anger nästa intervall (1-15, 16-30, 31-45, osv). De senaste nyheterna ska komma först.
Så därför försöker jag skriva en SP (Skriven för SQL Server) som tar två argument:
* en siffra som anger start,
* en siffra som anger antal poster som ska hämtas (tex 15).
Så när användaren klickar på länken "16-30" ska jag visa 15 nyheter men det ska vara den 16:e senaste nyheten och 14 nyheter som skrevs innan den 16:e nyheten (hoppas ni förstår hur jag menar).
Mitt problem är att start och nyhetsID inte är samma sak. Så jag kan inte använda nyhets id. Hur skriver man en sån SP? Ska man använda TOP, COUNT, annat och i sånafall kan ni ge ett exempel hur sql-koden ser ut?
Mvh,
NazSv: Intervall hantering i sql
NewsID int
Title varchar(64)
Preamble varchar(8000)
Created datetime
Createdby varchar(255)
Mvh,
NazSv: Intervall hantering i sql
Vad det gäller paging i SQL Server så är det lite dåligt med det tyvärr. Man kan använda sig av dubbla top satser och dynamisk sql på följande sätt:
(Jag kallar din tabell tbl1. OBS! Start är sidnumret. dvs 1 för 1-15, 2 för 16-30 osv)
create proc test @start int, @num int
AS
SET NOCOUNT ON
declare @totrows int
declare @sql varchar(1000)
select @totrows=count(*) from tbl1
select @sql='select top ' + convert(varchar, @num) + ' * from '
select @sql=@sql + ' (select top ' + convert(varchar, @totrows-((@start-1)*@num)) + ' * from tbl1 order by NewsID) as der '
select @sql=@sql + ' order by NewsID desc'
select @sql
if @totrows > ((@start-1)*@num)
exec (@sql)