【发布时间】:2014-04-30 18:44:31
【问题描述】:
我有一个使用 SQL Server 2005 的 asp.net 应用程序。在此应用程序中,我想创建一个函数,该函数返回新查询 ID 的唯一参考号。
我阅读了有关 UNIQUEIDENTIFIER 的信息,但它具有特定的格式,例如 1548C3E02-2D73-4244-8787-D45AC590519A。
我想要像 1703-HJIF-2012 这样的输出。这里首先有当前日期部分的组合,如日期和月份,第二个是自动生成的随机字符串,第三个是当前日期的年份部分。我不知道如何创建这样的函数以及如何从存储过程中调用该函数并从具有这种所需格式的函数中获取结果字符串。
这里有人向我发布了这个函数,但这会生成空格而不是 0:
create function UniqueRefNum (@r1 float, @r2 float, @r3 float, @r4 float)
returns char(14)
begin
-- Not sure if rand() might return 1.0
-- If it does, the conversion code below would produce a character that's not an
-- uppercase letter so let's avoid it just in case
if @r1 = 1.0 set @r1 = 0
if @r2 = 1.0 set @r2 = 0
if @r3 = 1.0 set @r3 = 0
if @r4 = 1.0 set @r4 = 0
declare @now datetime
set @now = getdate() -- or getutcdate()
declare @m char(2)
if month(@now) < 10
set @m = '0' + month(@now)
else
set @m = month(@now)
declare @d char(2)
if day(@now) < 10
set @d = '0' + day(@now)
else
set @d = day(@now)
return @m + @d + '-' +
char(65 + cast(@r1 * 26 as int)) +
char(65 + cast(@r2 * 26 as int)) +
char(65 + cast(@r3 * 26 as int)) +
char(65 + cast(@r4 * 26 as int)) +
'-' + cast(year(@now) as varchar)
end
然后,您可以像这样从存储过程中调用该函数:
declare @uniqueRef char(14)
set @uniqueRef = dbo.UniqueRefNum(rand(), rand(), rand(), rand())
----------------已更新---------------------------- -
它生成的输出是这样的:
4 24-HHBH-2014
我想输出这样的东西:
2404-HHBH-2014
DDMM-XXXX-YYYY
【问题讨论】:
-
您打算如何确保它是独一无二的?由于它是 100% 随机的,因此即使生成两个值也会有冲突的风险。
-
它会生成唯一的引用字符串检查它。
-
@ShalinGajjar 你能发布你当前和预期的输出吗?顺便说一句,这在应用层不是更容易吗?
-
@TomT ya 我编辑我的问题。
标签: tsql sql-server-2005