--创建调用Rand()的视图
--自定义函数中不可以用“不确定函数”,借助视图使用rand()函数
ALTER VIEW [dbo].[RandomView] AS SELECT RERAND=RAND()
--创建自定义函数
ALTER FUNCTION [dbo].GetSerialNo
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @FIANL_SERIALNO VARCHAR(100)
SELECT @FIANL_SERIALNO='AAA'+REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-',''),' ',''),':','')+CONVERT(VARCHAR(100),1000+ROUND((9999-1000)*RERAND,0)) FROM RandomView
IF EXISTS(SELECT SERIAL_NO FROM XX_XXX WHERE SERIAL_NO =@FIANL_SERIALNO) --判断创建的流水号是否已存在
BEGIN
SELECT @FIANL_SERIALNO=[dbo].GetSerialNo--如果存在调用自身重新生成
END
RETURN @FIANL_SERIALNO
END
--测试
SELECT [dbo].GetSerialNo
--结果
AAA202110141434381372