Questa è una vecchia versione del documento!
Enumerare i risultati di una query
(Come enumerare i record ottenuti da una select)
Serviamoci della seguente tabella di esempio:
USE DbTemp IF OBJECT_ID(N'dbo.tblData', 'U') IS NOT NULL DROP TABLE dbo.tblData -- Create table [dbo].[tblData] PRINT (N'Create table [dbo].[tblData]') CREATE TABLE dbo.tblData ( IdData INT NOT NULL DEFAULT 0 ,Code VARCHAR(50) NOT NULL DEFAULT ('') ,Description VARCHAR(150) NOT NULL DEFAULT ('') ,Data DATETIME NOT NULL DEFAULT (GETDATE()) ) ON [PRIMARY]
Popoliamo la tabella con alcuni dati di esempio:
USE DbTemp DECLARE @Row INT = 0; DECLARE @Code NVARCHAR(7); DELETE FROM dbo.tblData WHILE @Row < 200 BEGIN SET @Row = @Row + 1; SET @Code = 'CDC' + RIGHT('0000' + CONVERT(NVARCHAR, @Row * 10),4) INSERT INTO dbo.tblData (IdData, Code, Description) VALUES ( @Row * 10 ,@Code ,'DESCRIPTION ' + @Code ) END;
Eseguiamo una SELECT
aggiungendo una colonna valorizzata con il numero di riga
SELECT ROW_NUMBER() OVER (ORDER BY IdData ASC) Row ,* FROM dbo.tblData
Eseguiamo una SELECT
“paginando” i risultati con 50 righe
DECLARE @From INT = 50; DECLARE @To INT = 100; WITH PageTable AS ( SELECT ROW_NUMBER() OVER (ORDER BY IdData ASC) Row ,* FROM dbo.tblData ) SELECT * FROM PageTable WHERE Row BETWEEN @From AND @To;