Пользовательский автоинкремент составного ключа SQL Server в дочернем поле

Я использую SQL Server 2012 Express. Я создал следующую таблицу

CREATE TABLE [dbo].[logis_location] 
( [loc_id] int identity  NOT NULL 
  , [loc_name] varchar(50)  NOT NULL   )

CREATE TABLE [dbo].[rev_bill] 
( [bill_id] int identity  NOT NULL   ,
  [loc_id] int  NOT NULL   )

ALTER TABLE [dbo].[rev_bill] 
ADD CONSTRAINT [rev_bill_PK] PRIMARY KEY CLUSTERED ( [bill_id] , [loc_id] )

ALTER TABLE [dbo].[rev_bill] WITH CHECK 
ADD CONSTRAINT [logis_location_rev_bill_FK1] 
FOREIGN KEY ( [loc_id] )

Bill_id автоматически увеличивается, но таблица счетов имеет составной ключ, основанный на таблице местоположений loc_id, которая является внешним ключом. В результате получается следующий вывод

   bill_id  loc_id
    1        1
    2        1
    3        2
    4        2
    5        1
    6        3
    7        2

Однако ожидаемый результат

   bill_id  loc_id
    1        1
    2        1
    1        2
    2        2
    3        1
    1        3
    3        2

Я хочу увеличить специфический для местоположения bill_id наиболее безопасным способом. Это означает, что при вставке нового счета идентификатор счета должен быть увеличен, но с учетом loc_id. Как указано выше, если есть счет для данного местоположения (например: loc_id = 4 ), первый счет для этого местоположения должен иметь bill_id 1, а следующий должен быть 2. Это требование клиента. Пожалуйста, дайте мне некоторую направляющую линию.


person kanchana sankalpa    schedule 16.06.2014    source источник
comment
Ваш вопрос не очень ясен - можете ли вы попытаться объяснить по-английски, что вы пытаетесь сделать и что вместо этого видите? Просто вываливать на нас груды данных в надежде, что мы угадаем то, что вам нужно, не очень полезно......   -  person marc_s    schedule 16.06.2014
comment
Я не вижу никакой разницы между текущим результатом и ожидаемым результатом?   -  person NcDreamy    schedule 16.06.2014
comment
Вам нужно, чтобы значения bill_id повторялись для каждого loc_id (и, предположительно, без пробелов)? за исключением некоторых конкретных ситуаций, было бы лучше просто иметь столбец с одним значением autogen, что означает, что каждый из них будет иметь уникальное значение...   -  person Clockwork-Muse    schedule 16.06.2014
comment
@Clockwork-Muse Нет, для данного loc_id все идентификаторы счетов должны быть уникальными, loc-id и bill_id оба являются составным ключом для таблицы счетов. Если мы возьмем только bill_id, для таблицы счетов (rev_bill), это не так. уникальный,,,   -  person kanchana sankalpa    schedule 16.06.2014
comment
Столбец идентификаторов не будет генерировать повторяющиеся значения, поэтому я не уверен, как вы получаете здесь повторяющиеся значения (это касается только генерации). Если вам нужен только не дублирующийся per-loc_id, простой столбец идентификаторов будет работать нормально.   -  person Clockwork-Muse    schedule 17.06.2014
comment
@Clockwork-Muse Спасибо, я понимаю, что столбец идентификаторов не будет генерировать повторяющиеся значения, что касается моего требования, как loc_id (внешний ключ), так и shroud bill_id должны быть первичными ключами, а идентификатор счета должен увеличиваться в зависимости от местоположения (loc- я бы). Как указано в скорректированном вопросе, есть ли более безопасный способ (чем заказать и занять первое место) сделать это увеличение в SQL Server 2012?   -  person kanchana sankalpa    schedule 17.06.2014
comment
Недавно я отвечал на аналогичный вопрос. Однако вы хотите избежать этого, если это возможно (из-за необходимости сериализации); делайте это только в том случае, если вам требуется (например, деловая потребность, а не техническая) наличие нескольких последовательностей без пробелов/значений перезапуска. Если вам просто нужен какой-то внутренний идентификатор только для БД, просто используйте обычный столбец автогенерации и не беспокойтесь о пробелах/значениях без перезапуска.   -  person Clockwork-Muse    schedule 17.06.2014