Правильный способ обновления таблицы сервера SQL с использованием внешнего интерфейса доступа

У меня есть интерфейс в доступе и серверная часть SQL Server 2008

одно из полей это номер счета и вот правила

это почтовый индекс типа 92111 плюс тире плюс номер.

поэтому первый будет 92111-1, второй 92111-2

это связано с тем, сколько клиентов у нас в почтовом индексе

Я хотел бы, чтобы этот почтовый индекс был автоматически сгенерирован. вот что мне нужно:

  1. пользователь вводит почтовый индекс
  2. У меня есть хранимая процедура, которая проверяет, существует ли уже этот почтовый индекс, чтобы увеличить его: если 92111-4 уже существует, то сделать его 92111-5.

Как правильно это сделать?

2 ответа

Решение

Я согласен с HansUp, что вы должны хранить ZIP и последовательность отдельно. Вы можете создать индексированное вычисляемое поле с именем AccountNumber, которое объединяет zip и последовательность.

Единственный способ сделать это - заблокировать таблицу, выбрав max(sequence) ... where ZIP = 12345, вставив новую запись, затем разблокировав таблицу. Однако блокировка таблицы означает, что все остальные должны ждать, что сильно влияет на масштабируемость. Я не могу рекомендовать это, но у меня нет другого решения.

Если вы храните как почтовый индекс, так и порядковый номер клиента в одном поле номера счета, вам придется разделить их на части, чтобы выяснить следующий порядковый номер в данном почтовом индексе.

Должно быть проще хранить их в 2 полях:

zipcode   sequence_num
92111     4
92111     5

Затем получите поле номера вашего счета с запросом, когда вам это нужно.

SELECT zipcode & "-" & sequence_num AS acct_num
FROM YourTable;

Затем, когда вам нужно определить следующий sequence_num, lngNextSequenceNum, в пределах данного почтового индекса, pZip:

lngNextSequenceNum = DMax("sequence_num", "YourTable", "zipcode = " & pZip) +1

Такой подход может хорошо работать для однопользовательского приложения. Если ваше приложение многопользовательское, вам нужно что-то более изысканное. Однако это требование существует независимо от того, храните ли вы "номер счета" в одном поле или разбиваете его на два поля.

См. Создание и использование гибких полей автонумерации для многопользовательского подхода.

Другие вопросы по тегам