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




update sql (6)

Dans le serveur sql, il n'est pas possible d'avoir plus d'une colonne comme identité.

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

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


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

Vous ne pouvez pas avoir deux colonnes Identity.

Vous pourriez obtenir quelque chose de proche de ce que vous voulez avec un déclencheur ...


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

Enterprise Manager ne vous autorise même pas à définir une colonne comme identité. Quand une seconde colonne est faite identité

Notez également que @@ identity renvoie la dernière valeur d'identité pour la connexion ouverte, ce qui n'aurait aucun sens si plus d'une colonne d'identité était possible pour une table.


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 augmenter en même temps


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[email protected]@IDENTITY
where ForstId = @@IDENTITY;

Merci,


Vous pouvez utiliser la 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







identity-column