2008-09-17 22 views
11

Quiero hacer una tabla en SqlServer que agregue, al insertar, una clave primaria autoincrementada. Esto debería ser una identificación autoincrementada similar a la funcionalidad auto_increment de MySql. (Abajo)SqlServer create table with MySql like auto_increment primary key

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

¿Hay alguna forma de hacerlo sin crear un activador de inserción?

Respuesta

21

gusta esta

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

Esta no es una respuesta a la pregunta. Ignora por completo el autoincremento y la clave primaria.¿Por qué está incluso marcado? –

1

declaran que el campo sea la identidad

0

Como han dicho otros, acaba de establecer la opción de Identidad.

1

Como se indicó anteriormente, utilice un campo de IDENTIDAD.

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

OP solicitó una clave primaria autoincrementada. La palabra clave IDENTITY no hace, por sí misma, que una columna sea la clave principal.

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

Muy bien, ¿por qué el otro está marcado como la respuesta correcta? –

4

Como han mencionado otros: agregue el atributo de IDENTIDAD a la columna, y conviértala en una clave principal.

Hay, sin embargo, las diferencias entre la identidad de MSSQL y AUTO_INCREMENT de MySQL:

  • MySQL requiere que un único restricción (a menudo en forma de una clave principal ) ser definida para la columna de AUTO_INCREMENT.
    MSSQL no tiene tal requisito.
  • MySQL le permite insertar valores manualmente en una columna AUTO_INCREMENT.
    MSSQL le impide insertar manualmente un valor en una columna IDENTITY ; si es necesario, puede anular al emitir un "SET IDENTITY_INSERT tablename ON" antes del inserto.
  • MySQL le permite actualizar valores en una columna AUTO_INCREMENT.
    MSSQL se niega a actualizar los valores en una columna IDENTIDAD .
9

Respondieron a su pregunta, pero quiero agregar un consejo para que alguien nuevo use las columnas de identidad. Hay momentos en los que debe devolver el valor de la identidad recién insertada para que pueda insertarla en una tabla relacionada. Muchas fuentes le indicarán que use @@ identity para obtener este valor. Bajo ninguna circunstancia debe usar @@ identity si desea mantener la integridad de los datos. Le dará la identidad creada en un desencadenador si uno de ellos se agrega para insertar en otra tabla. Como no puede garantizar que el valor de @@ sea siempre correcto, lo mejor es nunca usar @@ identity. Use scope_identity() para obtener este valor en su lugar. Sé que esto está ligeramente fuera de tema, pero es importante para su comprensión de cómo usar la identidad con SQL Server. Y créeme, no querías solucionar un problema de los registros relacionados que tienen un valor de identidad incorrecto. Esto es algo que puede ir mal durante meses antes de que se descubra y es casi imposible reparar los datos posteriormente.

Cuestiones relacionadas