Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2013, 12:28
Avatar de Huasi
Huasi
 
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 7 meses
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?