1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| CREATE PROCEDURE Ps_SQLLimit (@sqlCMD as varchar(1024),@min as int,@max as int)
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE @cmdALL as varchar(2048)
IF @min > @max
RAISERROR ('@min ne peut etre superieur à @max ',16,1)
SET @cmdALL='SELECT IDENTITY(int,1,1) as MyRank, t.* INTO TmpTable FROM ( ' + @sqlCMD + ') as t'
exec (@cmdALL)
IF @@ERROR<> 0
GOTO LBL_ERR
SELECT * from TmpTable
WHERE MyRank BETWEEN @min and @max
IF @@ERROR<> 0
GOTO LBL_ERR
DROP TABLE TmpTable
IF @@ERROR<>0
GOTO LBL_ERR
COMMIT TRANSACTION
GOTO LBL_FIN
LBL_ERR:
ROLLBACK TRANSACTION
LBL_FIN:
GO |
Partager