--Create a view (because newid() cannot be used directly in a function) create view V_Newid as select switch () N'MacoId '; go -- create function create function sf_getrandstr(@n int) returns varchar(max) as begin declare @i int set @i=ceiling(@n/32.00) declare @j int set @j=0 declare @k varchar(max) set @k='' while @j<@i begin select @k=@k+replace(cast(MacoId as varchar(36)),'-','') from V_Newid set @j=@j+1 end set @k=substring(@k,1,@n) return @k end select dbo.sf_getrandstr(10)
This instance has been tested within 1 million pieces of data, and the 10-digit random numbers will not be repeated.
From : http://blog.csdn.net/mssql_dba/article/details/39694563