Capitulos de este wiki
  1. 1 Identificadores autoincrementales en SQL SERVER

Identificadores autoincrementales en SQL SERVER - Identificadores autoincrementales en SQL SERVER

1 - Identificadores autoincrementales en SQL SERVER

[editar]
Tutorial creado por Patxi Echarte. Extraido de: http://www.eslomas.com/index.php/archives/2005/04/21/identificadores-autoincrementales-en-sql-server/
27 de Abril de 2006
Es habitual al crear una tabla de base de datos necesitar que el identificador de la tabla sea un entero autoincremental. Para hacer esto en SQL SERVER se utiliza IDENTITY. Con esto, definiendo una columna como int IDENTITY, haremos que cada vez que insertemos un registro se genere un nuevo identificador automáticamente.

Lo más habitual es querer que el primer identificador que se genere sea el 1 y que a partir de ahí, se generen identificadores en incrementos de 1, es decir, 2,3,4… Sin embargo existe la posibilidad de indicar ambos valores a la hora de definir la columna, así por ejemplo, int IDENTITY(5,10), generaría un primer identificador con valor de 5, y el resto con incrementos de 10, es decir, 15,25,35

Es posible además, si en algún momento lo necesitamos, volver a poner el contador interno que lleva la numeración a su estado inicial, por ejemplo si hemos vaciado la tabla y queremos volver a introducir valores, que cojan identificadores inicialmente desde el 1. Una solución algo drástica, es borrar la tabla y volver a generarla, otra más sútil es utilizar la siguiente orden:

dbcc checkident (nombretabla,reseed,0)

Para terminar con este tema, hay un problema en lo que respecta a la programación cuando utilizamos autoincrementales, ya que tras hacer un INSERT en la base de datos, muchas veces necesitamos obtener el identificador que se ha asignado al nuevo registro. Esto con otras bases de datos como MySQL es realmente sencillo, pero se complica algo en SQL SERVER, ya que el SGBD no nos lo devuelve de forma automática. Para ello hay que realizar una consulta tras la inserción, a continuación se muestra un código de ejemplo en C#.

Insertamos un registro en una tabla de ejemplo de autores, que consta
de una columna con identificador autoincremental y un nombre.
Tras la inserción añadimos el sql que obtiene de SCOPE_IDENTITY
el último id insertado en la tabla de autores
string query = "INSERT INTO autores(name) VALUES ('@autor');"
+ "SELECT @thisId=SCOPE_IDENTITY() FROM autores";

SqlConnection sqlConnection = new SqlConnection(Configuration.Instance.GetValue("ConnectionString"));
SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);

asigno el parámetro de entrada del autor
sqlCommand.Parameters.Add("@autor", System.Data.SqlDbType.VarChar).Value = "Patxi";

indico que la query tiene un parámetro de salida thisId de tipo int
sqlCommand.Parameters.Add("@thisId", System.Data.SqlDbType.Int).Direction = ParameterDirection.Output;

sqlConnection.Open();

try{
Ejecutamos la query
sqlCommand.ExecuteScalar();

este es el identificador generado
int id = (int)sqlCommand.Parameters["@thisId"].Value;

}
catch(Exception exc){
throw new Exception("Error al insertar datos", exc);
}
finally{
sqlConnection.Close();
}

Espero que sea de utilidad, si eres un experto en SQL Server o crees que hay algo incorrecto, o que se podría hacer mejor de otra forma utiliza los comentarios para compartirlo, todos te lo agradeceremos.
[editar]

3 opiniones

No me funciona el sql.

Parece tener mucha logica, pero intento ejecutar el sql directamente en el servidor y hago la insercion y el segundo sql me devuelve

| identificador
-
1 null
2 null
3 null

el query es este
select identificador=scope_identity() from tabla.
Obtención del identity insertado.

Scope_identity es la forma más fiable de obtener el código identity insertado ??


estamos seguros al 100% que siempre obtendremos el código identity insertado realmente para todas las situaciones posibles del mundo mundial ?.
Identificadores autoincrementales en sql server.

Me parece de gran ayuda.

Tutoriales relacionados con 'Identificadores autoincrementales en SQL SERVER'

A pesar de mis limitados conocimientos de SQL Server, creo que esta explicación sobre diversas... Más »

Autor y licencia de 'Identificadores autoincrementales en SQL SERVER'

De forma general todos los contenidos de este web están sujetos a una licencia del tipo Creative Commons “Algunos derechos reservados”. Salvo que se diga lo contrario la única restricción impuesta si quieres utilizar algo de lo que aparece en este web, es la de indicar que el autor soy yo, Patxi Echarte.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.