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

Multiple Insert Into Select con Scope_Identity()

Estas en el tema de Multiple Insert Into Select con Scope_Identity() en el foro de SQL Server en Foros del Web. Hola que tal, tengo una nueva consulta para hacerles. Estoy trabajando en un proyecto web en el cual, el sistema comprueba la primera vez que ...
  #1 (permalink)  
Antiguo 16/04/2013, 12:28
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años
Puntos: 2
Multiple Insert Into Select con Scope_Identity()

Hola que tal, tengo una nueva consulta para hacerles. Estoy trabajando en un proyecto web en el cual, el sistema comprueba la primera vez que el usuario inicia sesión para crearle un escenario a modo de ejemplo con datos ficticios. Estos datos se obtienen y se graban en tablas de la misma base de datos, de manera que me estoy manejando con Insert Into Select. Voy a minimizar la estructura para no hacer compleja la cuestión, sería algo así:

Empresas
Id (int pk)
RazonSocial (nvarchar 50)
Cuit (nvarchar 13)

Clientes
Id (int pk)
Nombre (nvarchar 50)

EmpresaCliente
EmpresaId (int fk Empresas.Id)
ClientesId (int fk Clientes.Id)

En realidad cada tabla tiene entre 10 y 50 campos y son varias las tablas que intervienen en la creación de este primer template, por eso mi duda no es como hacer esto sino como hacerlo utilizando un solo procedimiento almacenado. De momento lo tengo funcionando con varios SP pero dada la cantidad de tablas que intervienen el código esta sucio y de poderse hacer sería mucho mejor con uno solo. Mi Query tiene esta forma:

Código SQL:
Ver original
  1. BEGIN TRANSACTION
  2. INSERT INTO [Empresas]
  3. ([RazonSocial], [Cuit])
  4. SELECT [RazonSocial], [Cuit]
  5. FROM Empresas E
  6. INNER JOIN Usuarios U ON U.Id = E.UsuarioId
  7. WHERE U.Id = -1
  8. INSERT INTO [Clientes]
  9. (C.Nombre)
  10. SELECT
  11. C.Nombre
  12. FROM Clientes C
  13. INNER JOIN EmpresaCliente EC ON EC.ClienteId = C.Id
  14. INNER JOIN Empresas E ON E.Id = EC.EmpresaId
  15. INNER JOIN Usuarios U ON U.Id = E.UsuarioId
  16. WHERE U.Id = -1
  17. INSERT INTO EmpresaCliente
  18. (EmpresaId, ClienteId)
  19. VALUES
  20. (Aca irian las @@IDENTITY que obtengo del INSERT de clientes y empresas)
  21. Commit TRANSACTION

Lo que necesito es obtener el Id luego del insert de empresa y cliente ya que no puedo utilizar los que están cargados en el template, tienen que ser los Ids que me se me acaban de otorgar. Mi idea es obtenerlos con Scope_Identity() y luego arrojarlos en un parametro para luego usarlo en el Insert de la tabla relacional EmpresaCliente. ¿Es posible hacer esto?
  #2 (permalink)  
Antiguo 16/04/2013, 16:23
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: Multiple Insert Into Select con Scope_Identity()

Respuesta: Es posible
__________________
MCTS Isaias Islas

Etiquetas: campos, funcion, insert, select, tabla
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 09:10.