Thursday, February 14, 2008

Ketika SET NOCOUNT diset ON dan ketika SET NOCOUNT diset OFF di Microsoft SQL Server

Ketika kita mengeksekusi perintah SQL 'Select', 'Insert','Update', dan 'Delete'
maka Microsoft SQL Server akan mengembalikan jumlah baris yang terpengaruh oleh perintah-perintah tersebut.

Contoh :


select * from TbPOdet


Hasil Eksekusi perintah select dari tabel 'TbPOdet' diatas :


NOBUKTI URUT KODEBRG QNT
-------------------- ----------- -------------------- ---------
000001/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/02/2008 2 A001090003 1.0000
000002/PO-AA/02/2008 1 A006300001 1.0000
000003/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/03/2008 1 A005290001 1.0000
000002/PO-AB/03/2008 1 A010010005 1.0000
000001/PO-AA/02/2009 1 A001090001 1.0000
000002/PO-AA/02/2009 1 A009340001 1.0000
000002/PO-AA/02/2009 2 A009310001 1.0000
000003/PO-AC/02/2009 1 A001090011 1.0000

(10 row(s) affected)


Pada akhir Eksekusi perintah diatas ditampilkan jumlah baris yang terpengaruh oleh sql tersebut yaitu '10 row(s) affected'
kalo perintah ini di eksekusi di query analyzer memang tidak mempunyai dampak yang tidak baik, Namun Stored Procedure
yang berisi seperti perintah diatas apabila diakses dari sebuah aplikasi seperti PowerBuilder maka aplikasi akan tertutup.
Masalah diatas dapat dengan perintah SET NOCOUNT di set ON. dengan menggunakan perintah ini maka Microsoft SQL Server tidak
akan menghasilkan '(10 row(s) affected)' pada akhir eksekusi query tapi hanya mengembalikan baris datanya saja.

Contoh :

SET NOCOUNT ON

select * from TbPOdet

SET NOCOUNT OFF

Hasil Eksekusi perintah select dari tabel 'TbPOdet' diatas :


NOBUKTI URUT KODEBRG QNT
-------------------- ----------- -------------------- ---------
000001/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/02/2008 2 A001090003 1.0000
000002/PO-AA/02/2008 1 A006300001 1.0000
000003/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/03/2008 1 A005290001 1.0000
000002/PO-AB/03/2008 1 A010010005 1.0000
000001/PO-AA/02/2009 1 A001090001 1.0000
000002/PO-AA/02/2009 1 A009340001 1.0000
000002/PO-AA/02/2009 2 A009310001 1.0000
000003/PO-AC/02/2009 1 A001090011 1.0000


Meskipun SET NOCOUNT diset ON tidak mengembalikan jumlah baris yang terpengaruh tapi fungsi @@ROWCOUNT tetap diupdate.
Hal ini bisa dilihat dari contoh dibawah ini.

Contoh :

SET NOCOUNT ON

select * from TbPOdet
print @@Rowcount
print 'Adalah Jumlah Record Pada Eksekusi Terakhir'

SET NOCOUNT OFF

Hasil Eksekusi perintah select dari tabel 'TbPOdet' diatas :


NOBUKTI URUT KODEBRG QNT
-------------------- ----------- -------------------- ---------
000001/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/02/2008 2 A001090003 1.0000
000002/PO-AA/02/2008 1 A006300001 1.0000
000003/PO-AA/02/2008 1 A001090001 1.0000
000001/PO-AA/03/2008 1 A005290001 1.0000
000002/PO-AB/03/2008 1 A010010005 1.0000
000001/PO-AA/02/2009 1 A001090001 1.0000
000002/PO-AA/02/2009 1 A009340001 1.0000
000002/PO-AA/02/2009 2 A009310001 1.0000
000003/PO-AC/02/2009 1 A001090011 1.0000


10
Adalah Jumlah Record Pada Eksekusi Terakhir

No comments: