Как указать уникальный номер в каждой квитанции об оплате в одной таблице базы данных Vb.Net - PullRequest
0 голосов
/ 10 августа 2011

У меня есть база данных, 3 или более таблиц и одна из них с 3 или более столбцами.

В этой таблице у меня есть столбец идентификатора, столбец имени, столбец даты и т. Д.

Мне нравится выбирать одну запись для печати и давать человеку один или несколько Квитанций об оплате (счета).

Но каждый раз, когда мне нравится, что количество квитанций уникально. Для всех людей в моей таблице и всех платежей.

Формат начального номера будет 00000000 или 00.000.000 или A 000000. Следующий номер +1 и т. Д.

Запросите дальнейшие объяснения.

См. Пример формы:

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

1 Ответ

3 голосов
/ 11 августа 2011

Если вы используете MS SQL-сервер, я бы использовал хранимую процедуру в базе данных для вставки новых записей и CLR (скалярную функцию) для получения следующего номера счета. На этом пути вы можете убедиться, что номер является уникальным.

ИП может выглядеть так:

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%, но вы должны понимать, что я имею в виду.

Редактировать: Вы также должны добавить уникальное ограничение , чтобы гарантировать уникальность. Тогда технически невозможно вставить две записи с одним и тем же номером счета. В этом примере я предположил, что первичный ключ таблицы не сам номер счета, а int-столбец, который является идентификатором (автоинкремент, здесь SSMS ).

Здесь - информация о том, как вызвать хранимую процедуру из ADO.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...