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 originalBEGIN TRANSACTION
INSERT INTO [Empresas]
([RazonSocial], [Cuit])
SELECT [RazonSocial], [Cuit]
FROM Empresas E
INNER JOIN Usuarios U ON U.Id = E.UsuarioId
WHERE U.Id = -1
INSERT INTO [Clientes]
(C.Nombre)
SELECT
C.Nombre
FROM Clientes C
INNER JOIN EmpresaCliente EC ON EC.ClienteId = C.Id
INNER JOIN Empresas E ON E.Id = EC.EmpresaId
INNER JOIN Usuarios U ON U.Id = E.UsuarioId
WHERE U.Id = -1
INSERT INTO EmpresaCliente
(EmpresaId, ClienteId)
VALUES
(Aca irian las @@IDENTITY que obtengo del INSERT de clientes y empresas)
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?