Autonumber adalah field yang isinya akan secara otomatis terisi menurut urutan tertentu.
Field Autonumber dapat dibuat dengan 2 cara :
1. Menggunakan field Identity (Autonumber). Field ini harus bertipe Int atau Numeric, kemudian tentukan Seed (Nilai dimulai dari berapa), Increment (Pertambahan Nilai)
2. Menggunakan StoreProcedure / Trigger / Function. Field ini akan dibuat oleh program dengan algoritma sbb :
1. Cari Nomor Akhir (Nomor terakhir yang ada di tabel)
2. Buat Nomor Baru (Nomor Akhir ditambah 1, dengan asumsi incrementnya 1)
3. Insert data dengan pada Field Autonumber dengan Nomor Baru
BUAT STOREPROCEDURE UNTUK INSERT DATA BERIKUT :
Studi kasus 1:
Berikut pola penomoran reset per tahun, setiap gudang punya nomor urut sendiri (Gudang G1 dan G2)
TbPOKasus1
NomorPO TGLPO GUDANG KODESUPPLIER
PO-2008-G1-00001 16/09/2008 G1 S-00001
PO-2008-G1-00002 16/09/2008 G1 S-00001
PO-2008-G2-00001 17/09/2008 G2 S-00002
PO-2008-G2-00002 17/10/2008 G2 S-00002
PO-2009-G1-00001 17/10/2009 G1 S-00002
PO-2009-G2-00001 17/10/2009 G2 S-00002
Studi kasus 2 :
Berikut pola penomoran reset per Awalan Nama Barang, Untuk Awalan Barang A nomornya adalah A001 sd A999, Awalan Barang B adalah B001 sd/ B999, dst untuk awalan lainnya.
TbPOKasus1
Nama Barang Kode Barang Stok
Meja Biro M001 5
Meja Makan M002 3
Kursi Tamu K001 2
Kursi Goyang K002 4
Karpet K003 3
Mantel M003 4
Bath Tube Toto 234 B001 2
create procedure InsertTbPOKasus1
@tglpo datetime,
@gudang varchar(10),
@kodesupplier varchar(10)
as
begin
declare @x int
declare @y varchar(20)
select @x = max(right(nomorpo,5))
from TbPOKasus1
where substring(nomorpo,4,4) = convert(varchar(4),datepart(yy,@tglpo))
and substring(nomorpo,9,2) = @gudang
if @x is null
set @x=1
else
set @x = @x+1
set @y='PO-'+convert(varchar(4),datepart(yy,@tglpo))+'-'+@gudang+'-'+right('00000'+convert(varchar,@x),5)
insert into TbPOKasus1(nomorpo,tglpo,gudang,kodesupplier)
values (@y,@tglpo,@gudang,@kodesupplier)
end
exec InsertTbPOKasus1 '2008/9/16', 'G1', 'S-00001'
exec InsertTbPOKasus1 '2008/9/16', 'G1', 'S-00001'
exec InsertTbPOKasus1 '2008/9/17', 'G2', 'S-00002'
exec InsertTbPOKasus1 '2008/10/17', 'G2', 'S-00002'
exec InsertTbPOKasus1 '2009/10/17', 'G1', 'S-00002'
exec InsertTbPOKasus1 '2009/10/17', 'G2', 'S-00002'
select * from TbPOKasus1
alter procedure InsertTbPOKasus2
@namabarang varchar(20),
@stok int
as
begin
declare @x int
declare @y varchar(10)
select @x = max(right(kodebarang,3))
from TbPOKasus2
where left(kodebarang,1)=left(@namabarang,1)
if @x is null
set @x=1
else
set @x=@x+1
set @y = left(@namabarang,1)+right('000'+convert(varchar,@x),3)
insert into TbPOKasus2(kodebarang,namabarang,stok)
values (@y,@namabarang,@stok)
end
exec InsertTbPOKasus2 'Meja Biro',5
exec InsertTbPOKasus2 'Meja Makan',3
exec InsertTbPOKasus2 'Kusi Tamu',2
exec InsertTbPOKasus2 'Kursi Goyang',4
exec InsertTbPOKasus2 'Karpet',3
exec InsertTbPOKasus2 'Mantel',4
exec InsertTbPOKasus2 'Bath Tube',2
select * from TbPOKasus
LAT no_ktp
SELECT TahunTglBuat + '/' + BulanTglBuat + '/' + [L/P] + '/' + CONVERT(varchar(2), DATEPART(dd, TglLahir)) + CONVERT(varchar(2), DATEPART(mm, TglLahir))
+ RIGHT(CONVERT(varchar(4), DATEPART(yy, TglLahir)), 2) + '/' + CONVERT(varchar(5), RIGHT(No, 5)) AS NoKTP
FROM dbo.Table_ktp
nodaftar nama l/p tgldaftar jurusan
2011/L-0001/IT A L 2011-01-11 IT
2011/P-0002/SS B P 2011-01-11 SS
alter PROCEDURE SP_TambahMhs
@pNama nvarchar(50),@pKelamin char(1),@pTglDaftar datetime,@pJurusan char(2)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NODaftar varchar(50)
select @NoAkhir = convert(int, Max(substring(NoDaftar,8,4)))
from Table_Daftar
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
set @NODaftar = convert(varchar(4), datepart(yy,@pTglDaftar))+ '/' + @pKelamin + '-' + RIGHT('000'+Convert(varchar(4), @NoBaru), 4) + '/' + @pJurusan
Insert into Table_Daftar (NoDaftar,Nama,Kelamin,TglDaftar,Jurusan)
Values (@NODaftar, @pNama,@pKelamin,@pTglDaftar,@pJurusan)
END
EXEC dbo.SP_TambahMhs 'william','L','01/01/2011','IT'
select * from Table_Daftar
NoPegawai ThnMasuk Nama
00001-2008-A 2008-1-1 Amir
00002-2008-B 2008-1-2 Badu
00001-2008-F 2009-3-3 Filbert
alter PROCEDURE SP_TambahPegawai
@pThnMasuk datetime,@pNama nvarchar(50)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NOPegawai varchar(50)
select @NoAkhir = convert(int, max(left(NoPegawai,5)))
from Table_Pegawai
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
set @NOPegawai = RIGht('000'+Convert(varchar(5), @NoBaru), 5) +'-' + convert(varchar(4), datepart(yy,@pThnMasuk))+ '-' + left(@pNama,1)
Insert into Table_Pegawai (NoPegawai,ThnMasuk,Nama)
Values (@NOPegawai,@pThnMasuk ,@pNama)
END
EXEC dbo.SP_TambahPegawai '01/01/2011','william'
select * from Table_Pegawai
buat function
1.NoPOTerakhir (@Tahun) -> varchar
ex:select nopoterakhir(2008)
2.nopobaru(@tahun) -> varchar
ex:select nopobaru(2010)
1.alter FUNCTION NoPOTerakhir
(
@Tahun datetime
)
returns varchar (20)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(13)
select @NoAkhir = convert(int, Max(right(@NomorPO,5)))
from tbPO
where substring(@NomorPO,4,4) = convert(char(4), Datepart(yy, @Tahun))
if @NoAkhir is null
Set @NoAkhir=0
Set @NomorPO = 'PO-' + convert(char(4), Datepart(yy, @Tahun )) + '-' +
RIGHT('00000'+Convert(varchar, @NoAkhir), 5)
return @NomorPO
END
select dbo.NoPOTerakhir ('01/01/2008')
2.alter FUNCTION NoPOBaru
(
@Tahun datetime
)
returns varchar (20)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(13)
select @NoAkhir = convert(int, Max(right(@NomorPO,5)))
from tbPO
where substring(@NomorPO,4,4) = convert(char(4), Datepart(yy, @Tahun))
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @NomorPO = 'PO-' + convert(char(4), Datepart(yy, @Tahun )) + '-' +
RIGHT('00000'+Convert(varchar, @NoBaru), 5)
return @NomorPO
END
select dbo.NoPOBaru ('01/01/2008')
CREATE PROCEDURE SP_TambahPelanggan
@NamaPelanggan varchar(50)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @KodePelanggan varchar(10)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(KodePelanggan,5)))
from Pelanggan
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @KodePelanggan = ‘C-‘ + RIGHT(‘00000’+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert Pelanggan (KodePelanggan, NamaPelanggan) Values (@KodePelanggan, @NamaPelanggan)
END
Execute SP_TambahPelanggan sbb :
--menambahkan data dengan nama Teddy
EXEC dbo.SP_TambahPelanggan 'Teddy'
select * from Pelanggan order by KodePelanggan DESC
Store Procedure Insert dengan Nomor Urut Reset Tahunan
Untuk Pembuatan Store Procedure Insert pada table TbPO sbb :
CREATE PROCEDURE SP_TambahTBPO
@TglPO datetime, @KodeSupplier varchar(10)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(13)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(NomorPO,5)))
from tbPO
where substring(NomorPO,4,4) = convert(char(4), Datepart(yyyy, @TglPO)))
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @NomorPO = ‘PO-‘ + convert(char(4), Datepart(yyyy, @TglPO )) + ‘-‘ +
RIGHT(‘00000’+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert tbPO (NomorPO, TglPO, KodeSupplier) Values (@NomorPO, @TglPO, @KodeSupplier)
END
Store Procedure Insert dengan Nomor Urut Reset Bulanan
Untuk Pembuatan Store Procedure Insert pada table TbPOBulanan sbb :
CREATE PROCEDURE SP_TambahTBPOBulanan
@TglPO datetime, @KodeSupplier varchar(10)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(15)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(NomorPO,5)))
from tbPOBulanan
where substring(NomorPO,4,4) = convert(char(4), Datepart(yyyy, @TglPO)) AND
convert(int, substring(NomorPO,8,2)) = Datepart(mm, @TglPO)
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @NomorPO = 'PO-' + convert(char(4), Datepart(yyyy, @TglPO )) +
right('0'+convert(varchar, datepart(mm,@TglPO)),2) + '-' +
RIGHT('00000'+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert tbPOBulanan (NomorPO, TglPO, KodeSupplier) Values (@NomorPO, @TglPO, @KodeSupplier)
END
Tidak ada komentar:
Posting Komentar