สำหรับคนที่ต้องการให้สร้างรหัสเอกสารโดยอัตโนมัติเช่น
PPYYYYMMNNN หรือ CCNNN
PP = Prefix, YYYY = ปี, MM = เดือน, NNN = auto number
วันนี้ CodeToday ขอนำเสนอการสร้างรหัสเอกสารอัตโนมัติดังนี้ครับ
เริ่มต้นด้วยการสร้างตารางดังนี้ครับ

tableName = ชื่อตาราง
prefix = ตัวอักษรนำหน้า
year = ปี
month = เดือน
number = auto number
lengthYear = จำนวนหลักปี (4, 2, 0 คือ ไม่ใช้ปี)
lengthMonth = จำนวนหลักเดือน (2, 0 คือไม่ใช้เดือน)
lengthNumber = จำนวนหลัก auto number
ตัวอย่างการเก็บข้อมูลดังนี้

แล้วสร้าง Store Procedure ดังนี้ครับ
CREATE PROCEDURE [dbo].[GetNewID]
(
@TableName nvarchar(20)
)
AS
declare @prefix as nvarchar(10)
declare @year as int
declare @month as int
declare @number as int
declare @lengthYear as int
declare @lengthMonth as int
declare @lengthNumber as int
select
@prefix=Prefix,
@year=[Year],
@month=[Month],
@number=Number,
@lengthYear=LengthYear,
@lengthMonth=LengthMonth,
@lengthNumber=LengthNumber
from RunningNumber
where TableName=@TableName
declare @currentYear int
declare @currentMonth tinyint
select
@currentYear=Year(getdate()),
@currentMonth=Month(getdate())
if @year<>@currentYear or @month<>@currentMonth
begin
set @year=@currentYear
set @month=@currentMonth
set @number=0
end
set @number=@number+1
update RunningNumber set
[Year]=@year,
[Month]=@month,
[Number]=@number
where TableName=@TableName
select
@prefix +
substring(cast(@year as nvarchar), len(@year)-@lengthYear+1,@lengthYear) +
ISNULL( replicate('0',@lengthMonth - len(@month)) +
cast((@month) as nvarchar), '') +
replicate('0',@lengthNumber - len(@number)) +
cast((@number) as nvarchar)
ถ้าต้องการเรียกใช้ก็สามารถเรัยกใช้ผ่าน Store Procedure ได้เลยครับ ตัวอย่างคือ
EXEC GetNewID @TableName='Customer'
ผลที่ได้คือ
CM00001
CM00002
CM00003
...
ตัวอย่างต่อไป
EXEC GetNewID @TableName='Quotation'
ผลที่ได้คือ
QT0806001
QT0806002
QT0806003
...
และเมื่อเดือนหรือปีเปลี่ยนตัวเลขจะไปเริ่มที่ 1 ใหม่ครับ
Imagination is more Important than Knowledge... /A.Einstein