Esto es lo maximo que yo puedo optimizar sin tener mas conocimiento de tu base.
Código SQL:
Ver originalALTER PROCEDURE [dbo].[bd_cas_t_cara_a]
@region SMALLINT,
@provincia SMALLINT,
@comuna SMALLINT,
@folio INTEGER,
@c_uv VARCHAR(3),
@c_tipo_a VARCHAR(2),
@poblacion VARCHAR(3),
@dc_manzana VARCHAR(4),
@c_calle VARCHAR(4),
@domicilio VARCHAR(6),
@block VARCHAR(3),
@depto VARCHAR(4),
@encuestador SMALLINT,
@puntaje FLOAT,
@fecha_ap VARCHAR(8)
AS
DECLARE @urb_rural INTEGER
SET @urb_rural = 1
SELECT @urb_rural = dc_urbano_rural
FROM t_calles
WHERE dc_Region = @region AND dc_Provincia = @provincia AND dc_Comuna = @comuna AND dc_Calle = @c_calle
SELECT @block = CASE WHEN @block = '' THEN 0 ELSE SUBSTRING(CONVERT(VARCHAR(3), @block),1,3) END
SELECT @depto = CASE WHEN @depto = '' THEN 0 ELSE SUBSTRING(CONVERT(VARCHAR(4), @depto),1,4) END
IF EXISTS(
SELECT 1
FROM t_cara_a
WHERE dc_Region = @region AND dc_Provincia = @provincia AND dc_Comuna = @comuna AND dc_Folio = @folio
)
BEGIN
DELETE t_cara_a WHERE dc_Folio = @folio
INSERT INTO t_cara_a (DC_region, dc_Provincia, DC_Comuna, DC_Folio, dc_urbano_rural, dc_unidad_vecinal,
dc_agrup_habit, dc_poblacion, dc_manzana, dc_calle, dg_numero_casa, dg_numero_block_casa, dg_numero_depto_sitio,
dc_encuestador, di_Ptje_Factor_Total, df_encuesta)
VALUES (@region, @provincia, @comuna, @folio, @urb_rural, @c_uv, @c_tipo_a, @poblacion, @dc_manzana,
@c_calle, @domicilio, @block,@depto, @encuestador,@puntaje ,@fecha_ap)
END
ELSE
BEGIN
INSERT INTO t_cara_a (DC_region, dc_Provincia, DC_Comuna, DC_Folio, dc_urbano_rural, dc_unidad_vecinal,
dc_agrup_habit, dc_poblacion, dc_manzana, dc_calle, dg_numero_casa, dg_numero_block_casa, dg_numero_depto_sitio,
dc_encuestador, di_Ptje_Factor_Total, df_encuesta)
VALUES (@region, @provincia, @comuna, @folio, @urb_rural, @c_uv, @c_tipo_a, @poblacion, @dc_manzana,
@c_calle, @domicilio, @block,@depto, @encuestador,@puntaje ,@fecha_ap)
END