IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.CP_Productos_xCampos_Copiar') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE dbo.CP_Productos_xCampos_Copiar 
END
GO

CREATE PROCEDURE [dbo].[CP_Productos_xCampos_Copiar] (@pId_Producto_Origen VARCHAR(14), @pId_Producto_Destino VARCHAR(14))
AS
DECLARE @Mensaje		VARCHAR(100)
DECLARE @Id_Campo		INT
DECLARE @Valor_String	VARCHAR(101)
DECLARE @Valor_Integer	INT
DECLARE @Valor_DT		DATETIME
DECLARE @Valor_Decimal	DECIMAL(20,4)
DECLARE @Valor_Memo		VARCHAR(MAX)

BEGIN TRY
	BEGIN TRAN


	DECLARE curProdXCampCopiar CURSOR FOR 
	SELECT Id_Campo, Valor_String, Valor_Integer, Valor_DT, Valor_Decimal, Valor_Memo 
	FROM Productos_xCampos
	WHERE
	Id_Producto = @pId_Producto_Origen

	OPEN curProdXCampCopiar
	FETCH NEXT FROM curProdXCampCopiar INTO @Id_Campo, @Valor_String, @Valor_Integer, @Valor_DT, @Valor_Decimal, @Valor_Memo
	WHILE @@FETCH_STATUS = 0
	BEGIN

		IF NOT EXISTS(SELECT 1 FROM Productos_xCampos WHERE Id_Producto = @pId_Producto_Destino AND Id_Campo = @Id_Campo)
		BEGIN
			INSERT INTO Productos_xCampos 
			(Id_Producto,			Id_Campo,	Valor_String,
			Valor_Integer,			Valor_DT,	Valor_Decimal,
			Valor_Memo) 
			VALUES 
			(@pId_Producto_Destino,	@Id_Campo,	@Valor_String,
			@Valor_Integer,			@Valor_DT,	@Valor_Decimal,
			@Valor_Memo) 
		END
		ELSE
		BEGIN
			UPDATE Productos_xCampos 
			SET 
			Valor_String	= @Valor_String, 
			Valor_Integer	= @Valor_Integer, 
			Valor_DT		= @Valor_DT, 
			Valor_Decimal	= @Valor_Decimal,
			Valor_Memo		= @Valor_Memo
			WHERE 
			Id_Producto = @pId_Producto_Destino 
			AND Id_Campo = @Id_Campo
		END
		
		FETCH NEXT FROM curProdXCampCopiar INTO @Id_Campo, @Valor_String, @Valor_Integer, @Valor_DT, @Valor_Decimal, @Valor_Memo
	END 
	CLOSE curProdXCampCopiar
	DEALLOCATE curProdXCampCopiar

	COMMIT
	SELECT	 0					AS ErrorNumber 
			,0					AS ErrorSeverity  
			,0					AS ErrorState 
			,0					AS ErrorProcedure  
			,0					AS ErrorLine		
			,@Mensaje			AS ErrorMessage
			,@pId_Producto_Destino	AS Id_Producto_Destino

	END TRY  


BEGIN CATCH  
    EXECUTE usp_GetErrorInfo;  
	ROLLBACK
END CATCH;
