Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Insertar valor a campo identity

Estas en el tema de Insertar valor a campo identity en el foro de SQL Server en Foros del Web. Hola, desde Visual Basic estoy enviando inserts a una base de datos, estos inserts llevan un valor para el campo id de cada tabla el ...
  #1 (permalink)  
Antiguo 20/08/2009, 16:59
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Insertar valor a campo identity

Hola, desde Visual Basic estoy enviando inserts a una base de datos, estos inserts llevan un valor para el campo id de cada tabla el cual es identity (autonumerico). Esto por defecto da error y no permite la inserción. Sin embargo, si antes de la insercion ejecutamos:

SET IDENTITY_INSERT mitabla ON

debería funcionar, según la documentación y ejemplos que he visto, pero no lo hace.

Como lo hago:

1) abro una conexion con el servidor
2) ejecuta querys que borran los datos de las tablas
3) leo los datos a cargar desde archivos planos
4) ejecuto SET IDENTITY_INSERT mitabla ON para una tabla
5) inserto uno a uno los registros en dicha tabla

da error.

¿Que puede ser?
  #2 (permalink)  
Antiguo 20/08/2009, 17:08
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Insertar valor a campo identity

cual es el mensaje de error?
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 20/08/2009, 20:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Insertar valor a campo identity

El error es:

An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON

que es el mismo que da si no ejecuto la instruccion: SET IDENTITY_INSERT mitabla ON

por eso digo que no me funciona.
  #4 (permalink)  
Antiguo 21/08/2009, 09:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Insertar valor a campo identity

No estoy seguro, pero no me gusta cuando dices "desde Visual Basic", ¿no deberia ser con un simple BULKINSERT?, tal vez en el tipo de conexion, usuario con el que te logeas, etc.
  #5 (permalink)  
Antiguo 21/08/2009, 10:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Insertar valor a campo identity

A mí me tiene que gustar, necesito interacción con el usuario.
¿Se entiende el problema?
  #6 (permalink)  
Antiguo 21/08/2009, 11:00
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Insertar valor a campo identity

Encontré el error, estaba usando una forma simplificada de insert, así:

insert into tabla values(1,'dos');

Lo cambié por:

insert into tabla(campo1,campo2) values(1,'dos');

y funcionó.

Ahora me gustaría saber por qué.
  #7 (permalink)  
Antiguo 21/08/2009, 11:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Insertar valor a campo identity

Esto dice el BOL:

SET IDENTITY_INSERT (Transact-SQL)

Permite insertar valores explícitos en la columna identidad de una tabla

Al ser EXPLICITOS, debe mencionarse la columna a la que se refiere la IDENTITY

Última edición por iislas; 21/08/2009 a las 14:29
  #8 (permalink)  
Antiguo 21/08/2009, 20:58
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Insertar valor a campo identity

Ok, gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.