Поле автоинкремента для объекта в SQL Server? - PullRequest
2 голосов
/ 03 августа 2009

В моей базе данных есть таблица "foo" с первичным ключом "fooID".

У меня есть вторая таблица "fooAttributes" с внешним ключом, который ссылается на foo.fooID.

Я хотел бы иметь составной ключ в таблице fooAttributes (fooID, attributeNumber), где attributeNumber автоматически увеличивается при каждом добавлении нового атрибута. Таким образом, foo номер 1 будет иметь атрибуты 1, 2, 3 ... и foo номер 2 будет иметь атрибуты 1, 2, 3 ... и т. Д.

Какой тип SQL-фу необходим для достижения этой цели? Это практично? (Я уверен, что это возможно при условии достаточных усилий.)

Ответы [ 2 ]

2 голосов
/ 03 августа 2009

Я не думаю, что есть способ сделать это автоматически в SQL, как столбец идентификации в MS SQL Server. Я бы построил хранимую процедуру, чтобы обработать эту передачу в fooID. Например:

begin tran    
select @attributeNumber = isnull(max(attributeNumber),0)+1 
from fooAttributes where fooID = @fooID 

insert fooAttributes(fooID, attributeNumber)
values(@fooID, @attributeNumber)
commit

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

1 голос
/ 03 августа 2009

Похоже, вы хотите Триггер на Foo.

При вставке в Foo:

Insert fooAttributes
 select SCOPE_IDENTITY(), attributeId 
 from attributes

Я предполагаю, что у вас есть таблица с названием "атрибуты", которая содержит все атрибуты. Если нет, вы можете сделать что-то свое, чтобы получить идентификаторы атрибута (моим первым предположением было бы перекрестное соединение на подвыборке).

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