Memanggil baris (row) antara  batasan bawah dan akhir (start and end) yang tdiak dapat dilakukan dengan SELECT biasa

Seabgai contoh kita ingin menampilkan baris pada tabel supplier antara baris 5 s/d 8. 

Asumsikan Anda membuat tabel supplier dengan kolom-kolom seperti skrip di bawah ini:

CREATE TABLE [supplier] (
[sp_kode] [char] (5) NOT NULL ,
[sp_nama] [varchar] (30) NULL ,
[sp_alamat] [varchar] (150) NULL ,
[sp_telepon] [varchar] (30) NULL ,
[sp_fax] [varchar] (30) NULL ,
[sp_email] [varchar] (30) NULL ,
CONSTRAINT [XPK_supplier] PRIMARY KEY CLUSTERED ([sp_kode])
)
GO

Selanjutnya buatlah prosedur dalam database yang digunakan misalkan dengan nama proc_supp seperti skrip SQL Server di bawah ini:

/********************************************************/
/* MS SQL Server                                        */
/* Procedure proc_supp                                  */
/* Untuk memanggil baris antara batasan bawah dan akhir */
/* (C) April 2007 Syahrial Chan                         */
/********************************************************/
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

ALTER PROC proc_supp (@start int, @end int,@type char(1))
AS
BEGIN 

DECLARE @looping int, @row int
DECLARE @sp_kode1 char(5),@sp_kode2 varchar(500),@command varchar(1000)

DECLARE c_supp SCROLL CURSOR FOR
SELECT sp_kode FROM supplier
ORDER BY sp_kode

SET @looping = 1

--Jika type = 1 retrieve row mulai dari @start s/d @end
SET @row = @end - @start + 1

IF @type = '2'
--Jika type = 2 retrieve row sebanyak @end row mulai dari row @start
SET @row = @end
ELSE

SET @row = @end - @start + 1
OPEN c_supp

FETCH ABSOLUTE @start FROM c_supp INTO @sp_kode1 

SET @sp_kode2 = "'" + @sp_kode1 + "'," 
WHILE @@FETCH_STATUS = 0
BEGIN

FETCH NEXT FROM c_supp INTO @sp_kode1 
SET @looping = @looping + 1
IF @looping > @row
BREAK
ELSE
BEGIN

SET @sp_kode2 = @sp_kode2 + "'" + @sp_kode1 + "'," 
CONTINUE

END

END
SET @sp_kode2 = left(@sp_kode2,len(@sp_kode2) - 1 )

CLOSE c_supp
DEALLOCATE c_supp

SET @command = 'SELECT * FROM supplier WHERE sp_kode IN (' + @sp_kode2 + ')'
EXEC (@command)

END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


Penggunaan:

Contoh-1

Tampilkan baris dalam tabel supplier mulai dari baris ke-5 s/d baris ke-8, maka cara memanggil procedure proc_supp adalah sebagai berikut:

EXEC proc_supp 5,8,'1'

Hasil pernyataan EXEC proc_supp 5,8,'1' adalah seperti di bawah ini:

00005,Cooperativa de Quesos 'Las Cab,Calle del Rosal 4,(98) 598 76 54,NULL,NULL
00006,Mayumi's,92 Setsuko Chuo-ku,(06) 431-7877,NULL,NULL
00007,Pavlova, Ltd.,74 Rose St. Moonie Ponds,(03) 444-2343,(03) 444-6588,NULL
00008,Specialty Biscuits, Ltd.,29 King's Way,(161) 555-4448,NULL,NULL

Contoh-2

Tampilkan baris dalam tabel supplier mulai dari baris ke-5 s/d baris ke-8, maka cara memanggil procedure proc_supp adalah sebagai berikut:

EXEC proc_supp 5,8,'2'

Hasil pernyataan EXEC proc_supp 5,8,'2' adalah seperti di bawah ini:

00005,Cooperativa de Quesos 'Las Cab,Calle del Rosal 4,(98) 598 76 54,NULL,NULL
00006,Mayumi's,92 Setsuko Chuo-ku,(06) 431-7877,NULL,NULL
00007,Pavlova, Ltd.,74 Rose St. Moonie Ponds,(03) 444-2343,(03) 444-6588,NULL
00008,Specialty Biscuits, Ltd.,29 King's Way,(161) 555-4448,NULL,NULL
00009,PB Knäckebröd AB,Kaloadagatan 13,031-987 65 43,031-987 65 91,NULL
00010,Refrescos Americanas LTDA,Av. das Americanas 12.890,(11) 555 4640,NULL,NULL
00011,Heli Süßwaren GmbH & Co. KG,Tiergartenstraße 5,(010) 9984510,NULL,NULL
00012,Plutzer Lebensmittelgroßmärkte,Bogenallee 51,(069) 992755,NULL,NULL

Dapatkan tip selanjutnya dengan mengunjungi website ini secara berkala!

kembali keatas