
SqlServer-实⽤技巧-流⽔号⽣成
代码如下
IFexists(SELECT*FROMsysobjectsWHEREname='GetSerialNumber'andType='FN')
DROPFUNCTION[dbo].[GetSerialNumber]
Go
/*=======================================
创建⼈:Lemon
创建⽇期:2020-05-14
功能描述:获取流⽔号,格式:标识+年⽉⽇+四位数序号(该年⽉⽇下数据的数量),需要有数据创建时间CDate
如果是新增则传⼊主键PrimaryKeyID为0,⽣成位新序号
如果是原有数据编辑则传⼊主键PrimaryKeyID,在CDate下根据主键进⾏排序获取四位数序号
如有需要可以将对应的TableName和PrimaryKeyName变为需要的表名和主键名,CDate修改为对应的⽇期
单元名称:GetSerialNumber
=======================================*/
CreateFUNCTION[dbo].[GetSerialNumber](@PrimaryKeyIDint,@ReamrkNvarchar(50))
RETURNSnvarchar(1000)
AS
BEGIN
DECLARE@SerialNumberNVARCHAR(1000)
IFisnull(@PrimaryKeyID,0)<>0
Begin
SELECT@SerialNumber=isnull(@Reamrk,'')
+convert(char(8),(SELECTisnull(CDate,GetDate())FROM[dbo].[TableName]WHEREPrimaryKeyName=@PrimaryKeyID),112)
+RIGHT(''
+CAST((SELECTRowID
FROM(
SELECTROW_NUMBER()OVER(ORDERBYPrimaryKeyName)ASRowID,*
FROM[dbo].[TableName]
WHEREconvert(char(8),CDate,112)=convert(char(8),(SELECTisnull(CDate,GetDate())FROM[dbo].[TableName]WHEREPrimaryKeyName=
WHEREPrimaryKeyName=@PrimaryKeyID
)ASvarchar(100)),4)
End
ELSE
Begin
SELECT@SerialNumber=isnull(@Reamrk,'')
+convert(char(8),getdate(),112)
+RIGHT(''+CAST((SELECTCOUNT(1)+1FROM[dbo].[TableName]WHEREconvert(char(8),CDate,112)=convert(char(8),getdate(),112))
End
RETURNisnull(@SerialNumber,'')
End
Go
lectSerialNumber=ialNumber(PrimaryKeyName,'Demo')fromTableName
实例效果图
本文发布于:2023-03-02 19:21:17,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/16777560776890.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:serialnumber.doc
本文 PDF 下载地址:serialnumber.pdf
| 留言与评论(共有 0 条评论) |