IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[paWcfSeInsTiposCar]') AND type in (N'P', N'PC') ) DROP PROCEDURE [dbo].[paWcfSeInsTiposCar] GO IF EXISTS ( SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'dataTypeTiposCar' ) DROP TYPE [dbo].[dataTypeTiposCar] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Tipo de tabla usado como parámetro (TVP) para insertar/actualizar/eliminar TiposCar, -- replica exactamente la estructura de la tabla TiposCar. CREATE TYPE [dbo].[dataTypeTiposCar] AS TABLE( [IdCrceria] [varchar](4) NOT NULL, [TipoCar] [varchar](50) NOT NULL, [Inactivo] [bit] NOT NULL, [CodSicetac] [varchar](10) NULL ) GO -- Mismo patrón que paWcfSeInsTiposVeh: una sola SP maneja insertar/actualizar/eliminar -- según @operacion ('i','u','d'), recibiendo el registro completo por TVP. CREATE PROCEDURE [dbo].[paWcfSeInsTiposCar] @TiposCar [dbo].[dataTypeTiposCar] READONLY, @operacion [varchar](1) WITH EXECUTE AS CALLER AS BEGIN TRAN BEGIN TRY --UPDATE SI-EXISTE RECORDS IF(@operacion = 'u') BEGIN UPDATE TiposCar SET TipoCar = t2.TipoCar, CodSicetac = t2.CodSicetac, Inactivo = t2.Inactivo FROM TiposCar t1 JOIN @TiposCar t2 ON t1.IdCrceria = t2.IdCrceria END --INSERT NO-EXISTE RECORDS IF(@operacion = 'i') BEGIN INSERT INTO TiposCar( IdCrceria, TipoCar, Inactivo, CodSicetac ) SELECT IdCrceria, TipoCar, Inactivo, CodSicetac FROM @TiposCar WHERE IdCrceria NOT IN(SELECT IdCrceria FROM TiposCar) END --DELETE RECORDS IF(@operacion = 'd') BEGIN DECLARE @id varchar(4) SELECT @id = IdCrceria FROM @TiposCar DELETE FROM TiposCar WHERE IdCrceria = @id END SELECT '1' COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR( @ErrorMessage, @ErrorSeverity, @ErrorState ); END CATCH RETURN 0 GO