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.
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.
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
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
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.
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.
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 ...
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,
dans SQL Server, il n'est pas possible d'avoir plus d'une colonne en tant qu'identité.