2008-09-17 8 views
11

Je veux faire une table dans SqlServer qui va ajouter, sur insertion, une clé primaire auto incrémentée. Cela devrait être un identifiant auto-incrémenté similaire à la fonctionnalité auto_increment MySql. (Ci-dessous)SqlServer créer une table avec MySQL comme auto_increment clé primaire

create table foo 
( 
user_id int not null auto_increment, 
name varchar(50) 
) 

Existe-t-il une façon de procéder sans créer de déclencheur d'insertion?

Répondre

21

Vous aimez cette

create table foo 
( 
user_id int not null identity, 
name varchar(50) 
) 
+0

Ceci n'est pas une réponse à la question. Il ignore complètement l'auto-incrément, problème de clé primaire.Pourquoi est-il même coché? –

1

déclare le terrain pour être l'identité

0

Comme d'autres l'ont dit, il suffit de définir l'option d'identité.

1

Comme indiqué ci-dessus, utilisez un champ IDENTITY.

CREATE TABLE foo 
(
user_id int IDENTITY(1,1) NOT NULL, 
name varchar(50) 
) 
9

OP a demandé une clé primaire auto incrémentée. Le mot-clé IDENTITY ne fait pas en soi qu'une colonne soit la clé primaire.

CREATE TABLE user 
(
    TheKey int IDENTITY(1,1) PRIMARY KEY, 
    Name varchar(50) 
) 
+0

Tout à fait raison, pourquoi l'autre est-il coché comme réponse correcte? –

4

Comme d'autres l'ont mentionné: ajoutez l'attribut IDENTITY à la colonne et en faites une clé primaire.

Il existe cependant des différences entre IDENTITÉ de MSSQL et la AUTO_INCREMENT de MySQL:

  • MySQL nécessite qu'une contrainte unique, (souvent sous la forme d'une clé primaire) est définie pour la colonne AUTO_INCREMENT.
    MSSQL n'a pas une telle exigence. MySQL vous permet d'insérer manuellement des valeurs dans une colonne AUTO_INCREMENT. MSSQL vous empêche d'insérer manuellement une valeur dans une colonne IDENTITY ; si nécessaire, vous pouvez surcharger en émettant une commande "SET IDENTITY_INSERT tablename ON" avant l'insertion.
  • MySQL vous permet de mettre à jour les valeurs dans une colonne AUTO_INCREMENT.
    MSSQL refuse de mettre à jour les valeurs dans une colonne IDENTITY .
9

Ils ont répondu à votre question, mais je souhaite ajouter un conseil à l'intention des nouveaux utilisateurs de colonnes d'identité. Il y a des moments où vous devez retourner la valeur de l'identité juste insérée pour que vous puissiez l'insérer dans une table liée. Beaucoup de sources vous diront d'utiliser @@ identity pour obtenir cette valeur. Vous ne devez en aucun cas utiliser @@ identity si vous souhaitez préserver l'intégrité des données. Cela donnera l'identité créée dans un déclencheur si l'un d'entre eux est ajouté pour être inséré dans une autre table. Puisque vous ne pouvez pas garantir que la valeur de @@ identity sera toujours correcte, il est préférable de ne jamais utiliser @@ identity. Utilisez scope_identity() pour obtenir cette valeur à la place. Je sais que c'est légèrement hors sujet, mais il est important pour votre compréhension de la façon d'utiliser l'identité avec SQL Server. Et croyez-moi, vous ne vouliez pas résoudre un problème lié aux enregistrements associés ayant une mauvaise valeur d'identité. C'est quelque chose qui peut tranquillement aller mal pendant des mois avant qu'il ne soit découvert et il est presque impossible de corriger les données par la suite.

Questions connexes