Sebelum memberikan solusi untuk pertanyaan beberapa poin pada pertanyaan Anda:
- Karena kunci utama Kustom sebagian besar terdiri dari tiga bagian Tanggal(140102), lokasi fisik tempat transaksi berlangsung (ID entitas), 4 nomor tempat(9999).
- Menurut desain pada satu tanggal di satu lokasi fisik, tidak boleh lebih dari 9999 transaksi -- Solusi Saya juga akan memiliki batasan yang sama.
Beberapa poin pada solusi saya
- Digit 4 tempat diikat dengan tanggal yang berarti untuk tanggal baru hitungannya dimulai dari 0000. MisalnyaGI_140102_1_0001, GI_140102_1_0002,GI_140102_1_0003,GI_140103_1_0000,GI_140104_1_0000
Bagaimanapun, bidang ini akan menjadi unik.
- Solusinya membandingkan tanggal terakhir dalam catatan dengan tanggal saat ini. Logika:Jika tanggal saat ini dan tanggal terakhir dalam catatan cocok, maka akan bertambah 4 digit tempat dengan nilai 1Jika tanggal saat ini dan tanggal terakhir dalam catatan tidak cocokIni menetapkan digit tempat ke-4 dengan nilai 0000.
Solusinya:(Kode di bawah ini memberikan nilai yang akan menjadi GoodsInwardId berikutnya, Gunakan sesuai kebutuhan agar sesuai dengan solusi Anda)
declare @previous nvarchar(30);
declare @today nvarchar(30);
declare @newID nvarchar(30);
select @previous=substring(max(GoodsInwardId),4,6) from SC_TD_GoodsInward;
Select @today=RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2);
if @[email protected]
BEGIN
Select @newID='GI_'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)
+'_'+CONVERT(varchar,1)+'_'+(SELECT RIGHT('0000'+
CONVERT(VARCHAR,CONVERT(INT,RIGHT(MAX(GoodsInwardId),4))+1),4)
from SC_TD_GoodsInward);
END
else
BEGIN
SET @newID='GI_'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)
+'_'+CONVERT(varchar,1)+'_0000';
END
select @newID;
T-SQL untuk membuat struktur yang diperlukan (Tebakan Kemungkinan)
Untuk tabel:
CREATE TABLE [dbo].[SC_TD_GoodsInward](
[EntityId] [int] NULL,
[GoodsInwardId] [nvarchar](30) NULL
)
Contoh record untuk tabel:
insert into dbo.SC_TD_GoodsInward values(1,'GI_140102_1_0000');
insert into dbo.SC_TD_GoodsInward values(1,'GI_140101_1_9999');
insert into dbo.SC_TD_GoodsInward values(1,'GI_140101_1_0001');
**Ini kemungkinan solusi dalam situasi Anda meskipun solusi sempurna adalah memiliki kolom identitas (gunakan reseed jika diperlukan) dan ikat dengan tanggal saat ini sebagai kolom yang dihitung.