Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 使用sql server 2008创建唯一引用号的函数_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 使用sql server 2008创建唯一引用号的函数

Tsql 使用sql server 2008创建唯一引用号的函数,tsql,sql-server-2005,Tsql,Sql Server 2005,我有一个使用SQLServer2005的asp.net应用程序。在这个应用程序中,我想创建一个函数,返回新查询Id的唯一参考号 我读过UNIQUEIDENTIFIER,但它有一个特定的格式,如1548C3E02-2D73-4244-8787-D45AC590519A 我想要像1703-HJIF-2012这样的输出。这里第一个是当前日期部分的组合,如日期和月份,第二个是自动生成的随机字符串,第三个是当前日期的年部分。我不知道如何创建这样一个函数,也不知道如何从存储过程中调用这个函数,并从函数中以这

我有一个使用SQLServer2005的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
------------更新--------------------

它的输出是这样的:

4 24-HHBH-2014
我想要这样的输出:

2404-HHBH-2014
DDMM-XXXX-YYYY

在连接字符串之前,需要将日/月值强制转换为char

declare @m char(2)
if month(@now) < 10
    set @m = '0' + cast(month(@now) as char(1))
else
    set @m = month(@now)

declare @d char(2)
if day(@now) < 10
    set @d = '0' + cast(day(@now) as char(1))
else
    set @d = day(@now)
declare@m char(2)
如果月份(@现在)<10
将@m='0'+角色(月份(@now)设置为字符(1))
其他的
设置@m=month(@now)
声明@d字符(2)
如果一天(@现在)<10
将@d='0'+日期(@now)设置为字符(1))
其他的
设置@d=day(@now)

问题是,
'0'+month(@now)
中的字符串被转换为整数,然后两个数字相加

你打算如何确保它的独特性?由于它是100%随机的,所以即使生成两个值也有发生冲突的风险。它会生成唯一的引用字符串。请检查它。@ShalinGajjar是否可以发布当前和预期的输出?顺便说一句,在应用层这不是更容易吗?@TomT ya我编辑了我的问题。
declare @m char(2)
if month(@now) < 10
    set @m = '0' + cast(month(@now) as char(1))
else
    set @m = month(@now)

declare @d char(2)
if day(@now) < 10
    set @d = '0' + cast(day(@now) as char(1))
else
    set @d = day(@now)