Augusto Humire Martinez web blog

algo de web-in

Obtener identity de un insert masivo o por lotes con output

Alguna vez hemos necesitado registrar valores en la tabla masivamente o por lotes para hacer un registro mucho mas rapido, pero ocurre si la tabla destino tiene un identity definida en la llave primaria?

Se puede obtener los identity de forma masiva tambien?
La respuesta es si, esto se logra con OUTPUT este commando nos puede retornar los campos las filas insertadas, aicionalmente un pequeño artilugio y voila, tenemos todos los indentity generados de un solo golpe.

Este es un ejemplo de como funcionaria

Cree las siguientes tablas y llene tantos valores considere necesario a la tabla DailyEvent, la otra tabla Incident puede dejarla vacia (es la tabla destino, la que contiene los identity a capturar)

—————————————————————————-
CREATE TABLE [dbo].[DailyEvent](
[Location] [varchar](100) NULL,
[Type] INT DEFAULT 0,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Incident](
[IncidentId] [int] IDENTITY(1,1) PRIMARY KEY
[Location] [varchar](100) NULL,
[Type] [int] NULL,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL,
[Guid] [varchar](100) NULL
)
GO
—————————————————————————-

Luego de llenar la tabla DailyEvent (la que contendria los datos origen en su proyecto)

ejecute el siguiente script y verá que la tabla #TEMPORAL_TABLE contiene todos Identity que se registraron en la tabla Incident, luego de ello haga los Ud desee con los datos que tiene en #TEMPORAL_TABLE, al fin y al cabo los tiene todos alli incluyendo los Id generados masivamente.

—————————————————————————-
IF object_id(‘tempdb..#TEMPORAL_TABLE’) IS NOT NULL
BEGIN
DROP TABLE #TEMPORAL_TABLE;
END

SELECT
0 AS IncidentId
,Location
,Type
,ClientId
,TimeEvent
,NEWID() AS Guid
INTO #TEMPORAL_TABLE
FROM DailyEvent DE
WHERE Type = 2 –CRASH CAR

DECLARE @pivotTable TABLE (IncidentId INT, Guid VARCHAR(100))

INSERT INTO Incident
(
Location
,Type
,ClientId
,TimeEvent
,Guid
)
OUTPUT inserted.IncidentId, inserted.Guid
INTO @pivotTable
SELECT
Location
,Type
,ClientId
,TimeEvent
,Guid
FROM #TEMPORAL_TABLE

UPDATE TT SET
TT.IncidentId = PP.IncidentId
FROM #TEMPORAL_TABLE AS TT
INNER JOIN @pivotTable AS PP ON PP.Guid = TT.Guid

SELECT * FROM #TEMPORAL_TABLE
—————————————————————————-

Voila.

mayo 10, 2018 Posted by | Uncategorized | 1 comentario

Como buscar un campo en la base de datos

SELECT TABLE_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ‘%campo_que_quiero_buscar%’

mayo 4, 2018 Posted by | Uncategorized | Deja un comentario