web-dev-qa-db-fra.com

Une table de serveur SQL peut-elle avoir deux colonnes d'identité?

J'ai besoin d'une colonne comme clé primaire et d'une autre pour incrémenter automatiquement un champ de numéro de commande. Est-ce possible?

EDIT: Je pense que je vais juste utiliser un numéro composé comme numéro de commande. Merci quand même.

26
William Hurst
CREATE TABLE [dbo].[Foo](
    [FooId] [int] IDENTITY(1,1) NOT NULL,
    [BarId] [int] IDENTITY(1,1) NOT NULL
)

résultats

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

Donc, non, vous ne pouvez pas avoir deux colonnes d'identité. Vous pouvez bien sûr faire en sorte que la clé primaire ne soit pas incrémentée automatiquement (identité).

Modifier: msdn: CREATE TABLE (Transact-SQL) et CREATE TABLE (SQL Server 2000)

Une seule colonne d'identité peut être créée par table.

31
Eugene Yokota

Vous pouvez utiliser Séquence pour la deuxième colonne avec la valeur par défaut SI vous utilisez 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

18
benkevich

Ajoutez une colonne d'identité, puis ajoutez une colonne calculée dont la formule est le nom de la colonne d'identité

Maintenant les deux vont s'incrémenter en même temps

7
Simon Powers

Non, il n'est pas possible d'avoir plus d'une colonne d'identité.

Enterprise Manager ne vous permet même pas de définir plus d'une colonne en tant qu'identité. Quand une deuxième colonne est faite identité

Notez également que @@ identity renvoie la dernière valeur d'identité pour la connexion ouverte, qui n'aurait aucun sens si plusieurs colonnes d'identité étaient possibles pour une table.

3
Only333
create table #tblStudent
(
    ID int primary key identity(1,1),
    Number UNIQUEIDENTIFIER DEFAULT NEWID(),
    Name nvarchar(50)
)

Deux colonnes d'identité ne sont pas possibles, mais si vous acceptez d'utiliser une colonne à identificateur unique, ce code fait également le même travail. Et vous avez également besoin d'une colonne supplémentaire - Nom de la colonne - pour insérer des valeurs.

Exemple d'utilisation:

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

select * from #tblStudent

Ps: NewID () function crée une valeur unique de type uniqueidentifier.

2
Ali Karaca

La clé primaire n'a pas besoin d'être une colonne d'identité.

Vous ne pouvez pas avoir deux colonnes d'identité.

Vous pouvez obtenir quelque chose près de ce que vous voulez avec un déclencheur ... 

1
Joe Ratzer

Je viens de créer un code qui vous permettra d'insérer deux identités sur la même table. permettez-moi de le partager avec vous au cas où cela vous aiderait:

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

Merci,

0
NiL

dans SQL Server, il n'est pas possible d'avoir plus d'une colonne en tant qu'identité.

0
Mladen Prajdic