Dzień dobry. Dzisiaj chciałbym przedstawić pewną procedurę, której głównym zadaniem będzie pobranie dowolnej ilości wierszy ostatnio dodanych do tabeli. Jak wiadomo do pobrania n-pierwszych rekordów służy polecenie:
SELECT TOP(@PARAM) FROM TABLE ORDER BY COLUMN
Wykorzystamy klauzylę TOP wraz z ORDER BY PRIMARY_KEY DESC(majejąco), aby wybrać N-wierszy spośród tabeli. Zatem utwórzmy przykładową tabelę:
CREATE TABLE [dbo].[Sonda](
[SondaId] [int] IDENTITY(1,1) NOT NULL,
[Typ] [bit] NOT NULL,
[Tytul] [nvarchar](256) NOT NULL,
[Widocznosc] [bit] NOT NULL,
[Dodano] [datetime] NOT NULL,
[KtoDodal] [nvarchar](256) NOT NULL,
[MaxOdpowiedzi] [int] NOT NULL,
CONSTRAINT [PK_Sonda] PRIMARY KEY CLUSTERED
(
[SondaId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Teraz wstawimy 10 rekordów
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 1',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 2',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 3',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 4',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 5',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 6',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 7',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 8',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 9',0,GETDATE(),'admin',25)
INSERT INTO Sonda(Typ,Tytul,Widocznosc,Dodano,KtoDodal,MaxOdpowiedzi)
VALUES (0,'Testowa sonda 10',0,GETDATE(),'admin',25)
GO
Skoro mamy już tabelę i rekordy to nadszedł czas na procedurę, która pobierze ostatnio dodane wiersze:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Sonda_GetSondaBottom]
@Limit int
AS
BEGIN
SET NOCOUNT ON;
SELECT top (@Limit) * FROM Sonda ORDER BY SondaId DESC
END
Na koniec przetestujemy naszą procedurę:
EXEC [dbo].[Sonda_GetSondaBottom]
@Limit = 10
Post zainspirowany tekstem:
http://particletree.com/notebook/select-last-100-records/