Может ли таблица sql server иметь два столбца идентификации?
Мне нужно иметь один столбец в качестве первичного ключа, а другой - автоматическое увеличение поля номера заказа. Возможно ли это?
EDIT: Я думаю, что просто буду использовать составной номер в качестве номера заказа. Спасибо в любом случае.
Ответы
Ответ 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