2014-04-26 2 views
0

SQL Server 2005를 사용하는 asp.net 응용 프로그램이 있습니다.이 응용 프로그램에서는 새 조회 ID에 대해 고유 한 참조 번호를 반환하는 함수를 만들려고합니다.SQL Server 2005에서 고유 한 참조 번호를 생성하는 함수

UNIQUEIDTITIER에 대해 읽었지 만 1548C3E02-2D73-4244-8787-D45AC590519A와 같은 특정 형식이 있습니다.

1703-HJIF-2012와 같은 출력이 필요합니다. 여기에는 먼저 날짜와 달과 같은 현재 datepart의 조합이 있고, 두 번째는 자동 생성되는 임의의 문자열이며 세 번째 것은 현재 날짜의 연도 부분입니다. 그런 함수를 어떻게 만들 수 있는지, 어떻게 저장 프로 시저에서이 함수를 호출하여이 필요한 형식의 함수에서 결과 문자열을 얻는지를 알지 못합니다. 여기

몇 가지 중 하나

나에게이 기능을 게시하지만,이 공백 대신 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 
+0

고유 한 기능을 어떻게 계획하고 계십니까? 100 % 무작위이므로 2 개의 값을 생성해도 충돌 위험이 있습니다. –

+0

고유 한 ref 문자열을 생성합니다. –

+0

@ShalinGajjar 현재 및 예상 출력을 게시 할 수 있습니까? BTW는 응용 프로그램 계층에서이 작업이 더 쉽지 않을까요? – TomT

답변

1

합니다.

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) 

것은 '0' + month(@now)의 문자열을 정수로 변환 된 후 두 숫자가 추가 된 점이다.

관련 문제