2013-04-29 9 views
-2

각 "고객"에게 고유 한 번호를 지정해야합니다. 기본적으로 계좌 번호 등. 접두사가있는 순차 번호를 생성해야합니다 ... 10001111에서 19999999로 말하십시오. 숫자는 고유해야합니다. 난 임의의 숫자를 만드는 방법을 알고 있지만 그 숫자는 고유해야하고 반복 할 수 없기 때문에 프로그래밍 논리로 시작하는 방법에 집착하고 있습니다. 도움이 될 C#을 찾았지만 VB.NET에서 프로그래밍 중입니다. 어떤 도움을 주시면 감사하겠습니다!접두사가있는 일련 번호 생성

+0

무작위로 그 범위에 들기를 원하면서 여전히 고유성을 유지하려는 경우 생성 할 때마다 이전에 생성 된 다른 모든 숫자를 폴링하여 고유성을 보장해야합니다. – NominSim

+0

하나에서 시작하여 계속 추가하나요? 아니면 난수를 사용해야하는 특별한 이유가 있습니까? –

+0

나는 일관성이 있어야합니다. 분명히 uniqueID를 1, 2, 3으로 할 수는 있지만 접두사가 모두 필요합니다. –

답변

2

정직하게도 SQL Server에서 ID 열보다 복잡한 작업을해야하는 이유는 알 수 없습니다.

CREATE TABLE Persons 
(
P_Id int PRIMARY KEY IDENTITY, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255) 
) 

출처 : W3 Schools

그런 다음 다시 고객 데이터를 뽑을 수 및 사전 펜던 정적 또는 동적으로 중이 접두사.

정적 예는

SELECT 'CUST-' + P_Id [CustomerNumber], LastName 
FROM Persons 

것하지만 아무것도 (여러 접두사를 포함 할 필요가있는 경우) 열 같은 동적으로 합류에 접두사를 추가에서 당신을 중지하지 않습니다.

하루가 끝날 때 고유 번호를 얻으려면 영구 저장소가 필요합니다. 여기에 바퀴를 재발 명하는 대신 DB 서버를 활용할 수 있습니다.

최신 ID 번호를 저장하는 작업을하는 DB가있는 테이블을 수동으로 증가 및 업데이트 할 수도 있지만 그다지 좋아하지는 않습니다. 너무 지저분 해.

+0

나는 당신의 제안으로 갈 것입니다. 똑똑하고 간단한 방법으로 보입니다. 여러 개의 접두어가 필요하지만 "계정 번호"가 어디에 위치하는지 식별하는 열이나 식별자를 만들뿐입니다. 예를 들어, "Identifier"열이 1이면 접두어 1000-uniqueIDhere를 추가하는 논리를 작성하십시오. 나는 그것이 일할 것 같아/내가 틀렸다/ –

+0

@LordRelix "IdPrefix"(또는 이와 유사한) 테이블에 열을 추가하는 것처럼 간단하게 유지할 것이고 ID가있는 해당 열을 연결하는 고객 ID를 반환 할 때마다 기둥. 그런 다음 계정 생성시 필요한 프리픽스를 자유롭게 저장할 수 있으며 나중에 조정할 필요가 없습니다 (추가 또는 제거되는 프리픽스 관련 변경 사항이있는 경우). –

+0

완벽. 나는 더 복잡한 방법이있을 것이라고 생각했다. 나는 내 인생을 비참하게 만듭니다. 대단히 감사합니다! –

1

이런 종류의 일을하는 일반적인 방법 중 하나는 모든 가능성을 한 번에 생성하여 목록에 저장하는 것입니다. 새 고객을 만들려면 목록에서 임의의 번호를 선택한 다음 다시 사용할 수 없도록 해당 목록에서 임의의 번호를 제거하십시오. 나는 이것이 당신의 시나리오에서 얼마나 실용적 일지 모르겠다.

+0

예를 들어, 테이블이 있는데 ... 1000001에서 199999까지의 최소/최대 범위로 ... 무작위로 값을 선택하는 쿼리를 만들 수 있습니까? –

+0

예, 다시 값을 선택할 수 없도록 값을 제거하려면 무언가를해야합니다. 실용적이든 아니든간에 테이블 크기에 따라 다르지만 "더 똑똑한"방법이있을 수 있습니다.http://stackoverflow.com/questions/3627029/smart-way-to-generate-unique-random-number – FakeDIY

+0

'모든 가능성을 즉시 생성합니다 .' 우리는 아직 양자 컴퓨터 시대에 있지 않습니다. :) – Neolisk