2009-06-30 9 views
8

Un collègue m'a demandé, si vous avez une table dans SQL Server avec seulement une colonne auto-incrément, comment insérer une nouvelle ligne dans cette table?Si j'ai une table avec seulement une colonne auto-incrémentée, comment l'insérer?

INSERT INTO MyTable() VALUES() 

... ne fonctionne pas. Pour ce qui est de ... je ne suis pas vraiment sûr. Mais j'ai trouvé la question assez convaincante.

+0

Voir la question [Syntaxe pour insérer dans un table avec aucune valeur?] (http://stackoverflow.com/q/2148091/905686) – user905686

Répondre

19
insert into mytable default values 
2

Apparemment, cela fonctionne:

INSERT INTO MyTable DEFAULT VALUES 

(juste découvert après je frappe Poser une question Désolé.!)

0
set identity_insert MyTable ON 

insert MyTable(MyIdentColumn) values(42) 

set identity_insert MyTable OFF 
+0

Approche intéressante. Cela pourrait fonctionner mieux si vous remplacez 42 par quelque chose qui calcule la prochaine valeur d'incrémentation automatique, comme MAX (id) + 1. –

+0

calculer le maximum + 1 irait à l'encontre de l'objectif d'insérer une valeur explicite dans une colonne d'identité. Le 42 était juste là en tant qu'exemple - vous brancheriez la valeur que vous essayiez d'insérer là. Si vous voulez juste le maximum, vous n'utiliserez pas mon exemple du tout. –

0

Utilisez le IDENTITY_INSERT Cadre:

SET IDENTITY_INSERT MyTable SUR INSERT INTO MyTable (AutoIncrementColumnName, OtherColumnNames ...) VALEURS (9999, OtherData ...) SET IDENTITY_INSERT MyTable OFF

Veillez à insérer une valeur qui n'est pas déjà dans la clé.

2

utilisation des valeurs par défaut, fonctionne également avec les valeurs par défaut

create table #test (id int identity, Somedate datetime default getdate()) 


insert #test default values 

select * from #test 

id Somedate

1 2009-06-30 16: 04: 03,307