2011-08-10 4 views
0

데이터베이스가 3 개 이상 있고 그 중 하나에 3 개 이상의 열이 있습니다. 내가 등 ID 열, 이름 열, 날짜 열이이 테이블에서 데이터베이스 Vb.Net 하나의 테이블에서 각 지불 영수증에 고유 번호를 부여하는 방법

내가 인쇄를 위해 하나 개의 레코드를 선택하고 사람에게 지급 (법안)의 하나 이상의 영수증을주고 싶다.

하지만 때마다 영수증 번호는 고유해야합니다. 내 탁자에있는 모든 사람들과 모든 지불금.

시작 번호 형식은 00000000 또는 00.000.000 또는 A 000000입니다. 다음 번호 +1 등

추가 설명을 요청하십시오.

참조 양식 예제 : 당신이 MS SQL-Server를 사용하는 경우

form example http://imageshack.us/photo/my-images/89/prinreceipt.png/

+0

이것은 실제로 명확하지 않습니다. 각 사람에 대해 1 (또는 0)부터 다시 시작하려면 고유 번호가 필요합니까? 또는 어떤 영수증과 상관없이 각 영수증에 대해 지속적으로 증분되는 별도의 고유 번호입니까? 당신은 DB에서 유일한 인덱스를 사용할 수 있고, 당신이하려고하는 것이면 그것이 더 큰 숫자를 얻고 증가시키는 함수를 가질 수 있습니다,하지만 그것이 당신이 요구하는 것과 정확히 일치하지는 않습니다. –

+0

어떤 데이터베이스를 사용하고 있습니까? –

답변

3

, 나는 새로운 기록과 CLR (스칼라 반환 함수)를 삽입하는 데이터베이스의 저장 프로 시저를 사용합니다 다음 청구서 번호를 얻으십시오. 이 방법으로 번호가 고유한지 확인할 수 있습니다. 같은

SP가 볼 수 있었다 :

CREATE PROCEDURE [dbo].[InsertBill] 
    @idBill int OUTPUT, 
    @CreationDate datetime OUTPUT, 
    @Name varchar(50) OUTPUT, 
    @BillNumber char(10) OUTPUT 
with execute as Owner 
AS 
INSERT INTO tBill(CreationDate, Name, BillNumber) 
VALUES (GetDate(), @Name, dbo.GetNextBillNumber()) 
;SELECT @idBill=idBill,@CreationDate=CreationDate, @Name=Name, @BillNumber=BillNumber 
FROM tBill WHERE (@idBill = SCOPE_IDENTITY()) 

다음 수는 MAX(BillNumber)+1 것, 형식은 10 개 문자 (A + 9 자리 숫자)이며, 다음 청구 번호를 생성하는 CLR :

CREATE FUNCTION [dbo].[GetNextBillNumber]() 
RETURNS CHAR(10) 
AS 
BEGIN 
    DECLARE @BillNumber CHAR(10); 
    DECLARE @nextBillNumber int; 
    SET @nextBillNumber = CONVERT(int,SUBSTRING((SELECT MAX(BillNumber) FROM tBill),2,9)) + 1; 
    SET @BillNumber = 'A' + RIGHT('000000000'+ CONVERT(VARCHAR,@nextBillNumber),9) 
    return @BillNumber 
END 

참고 : 100 % 테스트하지는 않지만 의미하는 바를 이해해야합니다.

편집 : 고유성을 보장하려면 add a unique constraint이어야합니다. 그런 다음 동일한 Bill-Number로 두 개의 레코드를 삽입하는 것은 기술적으로 불가능합니다. 이 예제에서 테이블의 primary-key은 빌 번호 자체가 아니라 Is Identity (자동 증가, here with SSMS) 인 int- 열이라고 가정합니다.

Here은 ADO.NET에서 저장 프로 시저를 호출하는 방법에 대한 정보입니다.

+1

+1 - 동의 함 - 데이터베이스를 사용하여 데이터의 무결성을 보장하고 고유 한 식별자를 생성해야합니다 –

관련 문제