Pregunta

Quiero crear una tabla en SqlServer que agregue, al insertarla, una clave primaria incrementada automáticamente.Esta debería ser una identificación autoincrementada similar a la funcionalidad auto_increment de MySql.(Abajo)

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

¿Hay alguna manera de hacer esto sin crear un disparador de inserción?

¿Fue útil?

Solución

Como esto

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

Otros consejos

OP solicitó una clave primaria incrementada automáticamente.La palabra clave IDENTITY, por sí sola, no convierte a una columna en la clave principal.

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

Han respondido a su pregunta, pero quiero agregar un pequeño consejo para alguien nuevo en el uso de columnas de identidad.Hay ocasiones en las que debe devolver el valor de la identidad que acaba de insertar para poder insertarla en una tabla relacionada.Muchas fuentes le indicarán que utilice @@identity para obtener este valor.Bajo ninguna circunstancia debe utilizar @@identity si desea mantener la integridad de los datos.Dará la identidad creada en un disparador si uno de ellos se agrega para insertarlo en otra tabla.Como no puede garantizar que el valor de @@identity siempre sea correcto, es mejor no utilizar nunca @@identity.Utilice Scope_identity() para obtener este valor en su lugar.Sé que esto está un poco fuera de tema, pero es importante para que comprenda cómo usar la identidad con SQL Server.Y créame, no quería solucionar el problema de que los registros relacionados tuvieran un valor de identidad incorrecto.Esto es algo que puede salir mal silenciosamente durante meses antes de que se descubra y es casi imposible corregir los datos después.

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

Sin embargo, existen diferencias entre IDENTITY de MSSQL y AUTO_INCREMENT de MySQL:

  • MySQL requiere que se define una restricción única (a menudo en forma de clave primaria) para la columna 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 de identidad;Si es necesario, puede anular esto emitiendo un comando "Set Identity_insert TableName en" en el referencia "antes del inserto.
  • MySQL le permite actualizar valores en una columna AUTO_INCREMENT.
    MSSQL se niega a actualizar los valores en una columna de identidad.

Simplemente configure el campo como campo de identidad.

declarar el campo como identidad

Como se recomendó anteriormente, utilice un campo IDENTIDAD.

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

Como han dicho otros, simplemente configure la opción Identidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top