правильный способ обновления таблицы сервера SQL с использованием внешнего интерфейса доступа - PullRequest
0 голосов
/ 20 сентября 2010

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

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

это почтовый индекс, например 92111, тире и цифра.

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

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

Должно быть проще хранить их в 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

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

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

1 голос
/ 21 сентября 2010

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

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

...