Подтвердить что ты не робот

Может ли таблица sql server иметь два столбца идентификации?

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

EDIT: Я думаю, что просто буду использовать составной номер в качестве номера заказа. Спасибо в любом случае.

4b9b3361

Ответ 1

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 ТАБЛИЦА (SQL Server 2000):

В таблице может быть создан только один столбец.

Ответ 2

Вы можете использовать Sequence для второго столбца со значением по умолчанию, если вы используете 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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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.

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

create trigger UpdateSecondTableIdentity
On TableName For INSERT
as
update TableName
set SecondIdentityColumn = [email protected]@IDENTITY
where ForstId = @@IDENTITY;

Спасибо,

Ответ 9

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

Итак, у меня есть таблица с одним идентификатором col: applicationstatusid. его также первичный ключ. Я хочу, чтобы автоматически увеличивать число col: 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