Senin, 25 Juli 2011

 Sql server 2005,

Pegurutan nilai data otomatis kedalam tabel

Dengan asumsi bahwa nilai yang akan dimasukan kedalam system , dalam hal ini ‘nomor’ didapat dengan bantuan system dengan bertambah otomatis saat klik pada tombol tambah yaitu +1 (plus satu) saat tombol tambak di klik.
Skrip pengubah nomor, letak pada trigger sebelum insert pada tabel :
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[ubah_nomor] on [dbo].[coba_berhasil] for insert
as
begin
declare @a int
declare @b int
declare @c int
declare @nomor  int, @tanggal datetime, @nominal decimal

--nilai record yang akan dimasukkan, yang akan dimasukan

select @b= nomor,@tanggal=tanggal,@nominal=nominal from inserted
--nilai record sebelumnya,yang ada pada tabel
select @a= nomor from coba_berhasil where nomor=any(SELECT TOP 1 nomor
FROM coba_berhasil WHERE nomor < @b ORDER BY nomor DESC)

--jika nilai sekarang selisihnya tidak = 1 maka akan dipaksa mengikuti nilai berikut /+1 dari nomor record sebelumnya,semisal jika nilai sebelumnya adalah 2 maka berapapun nilai yang masuk akan diubah menjadi 3, ya..seperti itulah…

if @b-@a<>1
set @c=@a+1
else
set @c=@a+1
print @c
insert into coba_berhasil values(@c,@tanggal,@nominal)
end


skrip penghapusan monor, letak trigger setelah insert:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[hapus_nomor] on [dbo].[coba_berhasil] after insert
as
begin
declare @a int
declare @b int
declare @c int
declare @d int
--nilai record sebelunya
--select @b= max(nomor) from coba_lagi
--nilai data yang telah dimasukan
select @c = nomor from inserted
--nilai data terakhir sebelum data dimasukan nilaiyang barus saja diinsert

select @a= nomor from coba_berhasil where nomor=any(SELECT TOP 1 nomor
FROM coba_berhasil WHERE nomor < @c ORDER BY nomor DESC)

--select @d= nomor from coba_berhasil where nomor=any(SELECT TOP 1 nomor
--FROM coba_berhasil ORDER BY nomor DESC)

--mengambil nomor yang baru dimasukkan
if (@c-@a)>1
begin
delete from coba_berhasil where nomor =@c
print 'data dihapus'
end
end


logika singkat:

data sebelum diinsert:



1     2000-12-12 00:00:00.000 50000
3     2000-12-12 00:00:00.000 50000
4     2000-12-12 00:00:00.000 50000
5     2000-12-12 00:00:00.000 50000
6     2000-12-12 00:00:00.000 50000
7     2000-12-12 00:00:00.000 50000
8     2000-12-12 00:00:00.000 50000
9     2000-12-12 00:00:00.000 50000
10    2000-12-12 00:00:00.000 50000
11    2000-12-12 00:00:00.000 50000
12    2000-12-12 00:00:00.000 50000

Data yang akan dinasukan:
18    2000-12-12 00:00:00.000 50000

Berarti: nomor data 18  akan diseleksi apakah selisihnya sama dengan satu dengan data sebelumnya, karena tidak maka data yang baru bernilai 13 akan dimasukan kedalam tabel baru setelah itu kedalam tabel dimasukan nilai yang dimaksud, yaitu data yang datanya bernomor 18

Inser pada dasarnya dilakukan 2x yaitu data yang bernilai 13 dan 18, dan seleksi akan dialakukan setelah insert

Seleksi setelah insert, jika nilai nilai yang baru dimasukan selisihnya lebih besar dari 1, jika dibandingkan dengan data sebelum diinsertnya data yang baru saja dimasukan, maka nilai tersebut akan dihapus. Karena 13 selisinya adalah 1 maka tidak akan dihapus, dan data no 18 selisihnya adalah 4 maka lebih besar dari 1 maka data akan dihapus…

Atau data sebelum = data yang nilainya lebih kecil dari nomor yang akan dimasukan, jadi jika nilai yang akan dimasukan adalah 18 maka nilai descending(urut dari atas kebawah)yang lebih kecil dari 18 akan diambil yaitu 12 begitu juga seterusnya dengan mengambil data yang lebih kecil dari data yang akan dimasukan

dengan asumsi bahwa semua ini dikerjakan dalam satu tahap dalam yaitu sekali insert pada satu tombol klik simpan jadi tak akan ada data yang tersimpan memiliki nilai yang sama karena pada prinsipnya data yang masuk adalah berurutan dan tak akan pernah ada yang bersamaan

0 comments:

Posting Komentar