
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,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/16777560776890.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:serialnumber.doc
本文 PDF 下載地址:serialnumber.pdf
| 留言與評論(共有 0 條評論) |