Может ли таблица sql server иметь два столбца идентификаторов? - PullRequest
27 голосов
/ 08 декабря 2008

Мне нужно иметь один столбец в качестве первичного ключа, а другой - для автоматического увеличения поля номера заказа. Возможно ли это?

РЕДАКТИРОВАТЬ: Я думаю, что я просто буду использовать составной номер в качестве номера заказа. В любом случае, спасибо.

Ответы [ 9 ]

33 голосов
/ 08 декабря 2008
CREATE TABLE [dbo].[Foo](
    [FooId] [int] IDENTITY(1,1) NOT NULL,
    [BarId] [int] IDENTITY(1,1) NOT NULL
)

возвращает

Msg 2744, Level 16, State 2, Line 1
Multiple identity columns specified for table 'Foo'. Only one identity column per table is allowed.

Итак, нет, вы не можете иметь два столбца идентификаторов. Конечно, вы можете сделать первичный ключ не автоматическим приращением (тождество).

Изменить: msdn: CREATE TABLE (Transact-SQL) и CREATE TABLE (SQL Server 2000) :

Для каждой таблицы можно создать только один столбец идентификаторов.

18 голосов
/ 02 апреля 2014

Вы можете использовать Последовательность для второго столбца со значением по умолчанию, ЕСЛИ вы используете SQL Server 2012

--Create the Test schema
CREATE SCHEMA Test ;
GO

-- Create a sequence
CREATE SEQUENCE Test.SORT_ID_seq
    START WITH 1
    INCREMENT BY 1 ;
GO

-- Create a table
CREATE TABLE Test.Foo
    (PK_ID int IDENTITY (1,1) PRIMARY KEY,
    SORT_ID int not null  DEFAULT (NEXT VALUE FOR Test.SORT_ID_seq));
GO

INSERT INTO Test.Foo VALUES ( DEFAULT )
INSERT INTO Test.Foo VALUES ( DEFAULT )
INSERT INTO Test.Foo VALUES ( DEFAULT )

SELECT * FROM Test.Foo 

-- Cleanup
--DROP TABLE Test.Foo
--DROP SEQUENCE Test.SORT_ID_seq
--DROP SCHEMA Test

http://technet.microsoft.com/en-us/library/ff878058.aspx

7 голосов
/ 21 мая 2011

Добавьте один столбец идентификаторов, а затем добавьте вычисляемый столбец, формула которого является именем столбца идентификаторов

Теперь оба будут увеличиваться одновременно

3 голосов
/ 29 мая 2011

Нет, невозможно иметь более одного столбца идентификаторов.

Диспетчер предприятия даже не позволяет установить> 1 столбец в качестве идентификатора. Когда второй столбец сделан личность

Также обратите внимание, что @@ identity возвращает последнее значение идентификатора для открытого соединения, которое было бы бессмысленным, если бы для таблицы было возможно более одного идентификатора.

2 голосов
/ 23 августа 2012
create table #tblStudent
(
    ID int primary key identity(1,1),
    Number UNIQUEIDENTIFIER DEFAULT NEWID(),
    Name nvarchar(50)
)

Столбец с двумя идентификаторами невозможен, но если вы согласитесь использовать столбец с уникальным идентификатором, этот код также выполняет ту же работу. А также вам нужен дополнительный столбец - Имя столбца - для вставки значений.

Пример использования:

insert into #tblStudent(Name) values('Ali')

select * from #tblStudent

Ps: Функция NewID () создает уникальное значение типа uniqueidentifier.

1 голос
/ 08 декабря 2008

Первичный ключ не обязательно должен быть столбцом идентификации.

У вас не может быть двух столбцов Identity.

Вы можете получить что-то близкое к тому, что вы хотите, с помощью триггера ...

0 голосов
/ 17 сентября 2014

Обходным путем будет создание триггера INSERT, увеличивающего счетчик.

Итак, у меня есть таблица с одним идентификатором col: applicationstatusid. это также первичный ключ. Я хочу автоматически увеличить еще один столбец: applicationnumber

Так что это триггер, который я пишу.

 create trigger [applicationstatus_insert] on [ApplicationStatus] after insert as 
       update [Applicationstatus] 
       set [Applicationstatus].applicationnumber =(applicationstatusid+ 4000000) 
       from [Applicationstatus] 
       inner join inserted on [applicationstatus].applicationstatusid = inserted.applicationstatusid
0 голосов
/ 13 февраля 2014

Я только что создал код, который позволит вам вставить два идентификатора в одну таблицу. позвольте мне поделиться с вами, если это поможет:

create trigger UpdateSecondTableIdentity
On TableName For INSERT
as
update TableName
set SecondIdentityColumn = 1000000+@@IDENTITY
where ForstId = @@IDENTITY;

Спасибо,

0 голосов
/ 08 декабря 2008

на сервере sql невозможно иметь более одного столбца в качестве идентификатора.

...