Latest Entries »

Monday, July 5, 2010

#MSSQL - SELECT BOTTOM FROM table

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/

0 comments:

Post a Comment