esofitec. CoreDocs

esofitec. CoreDocs

Vistas SQL

Plantillas y ejemplos

Esqueletos listos para copiar a la pantalla de Vistas personalizadas y rellenar. El porqué de cada pieza está en el artículo de vistas SQL.

Vista de consulta con parámetros#

Una consulta con ventana de parámetros típica — rango de fechas y un código con selector de tabla y filtro opcional cuando se deja vacío:

DECLARE @FECHAINI DATETIME;
DECLARE @FECHAFIN DATETIME;
DECLARE @CLIENTE  VARCHAR(8);

SET @FECHAINI = [Fecha Inicio,DATETIME,01/01/2026];
SET @FECHAFIN = [Fecha Fin,DATETIME,31/12/2026];
SET @CLIENTE  = [Cliente,CUADRADO(8), ,(CLIENTES,CODCLI)];

SELECT
    F.SERIE    'Serie',
    F.NUMDOC   'Número',
    F.FECHA    'Fecha',
    F.CODCLI   'Cód. cliente',
    F.TOTDOC   'Total'
FROM CABEFACV F WITH (NOLOCK)
WHERE F.FECHA BETWEEN @FECHAINI AND @FECHAFIN
  AND (F.CODCLI = @CLIENTE OR @CLIENTE = '        ')
ORDER BY F.FECHA;

Vista de proceso con un solo DML#

Una única sentencia es atómica por sí misma — no necesita transacción. El comentario inicial de advertencia forma parte de la plantilla; descríbele al siguiente qué toca el proceso.

-- PROCESO - MODIFICA DATOS
-- Describe aquí qué hace el proceso y sobre qué tablas.
-- Revisar bien los parámetros antes de ejecutar; no hay confirmación previa.

SET NOCOUNT ON;

BEGIN TRY
    UPDATE ...   -- la lógica del proceso

    DECLARE @filas INT = @@ROWCOUNT;

    SET NOCOUNT OFF;
    SELECT
        'OK'                              'Estado',
        'Proceso finalizado sin errores'  'Mensaje',
        @filas                            'Registros actualizados';
END TRY
BEGIN CATCH
    SET NOCOUNT OFF;
    SELECT
        'ERROR'             'Estado',
        ERROR_MESSAGE()     'Mensaje',
        ERROR_NUMBER()      'Número',
        ERROR_SEVERITY()    'Severidad',
        ERROR_STATE()       'Estado SQL',
        ERROR_LINE()        'Línea',
        ERROR_PROCEDURE()   'Procedimiento';
END CATCH

Vista de proceso con varios DML#

Con transacción explícita para que el conjunto sea atómico, y ROLLBACK condicional en el CATCH:

-- PROCESO - MODIFICA DATOS
-- Describe aquí qué hace el proceso y sobre qué tablas.
-- Revisar bien los parámetros antes de ejecutar; no hay confirmación previa.

SET NOCOUNT ON;

BEGIN TRY
    BEGIN TRANSACTION;

    UPDATE ... ;
    UPDATE ... ;
    DECLARE @filas INT = @@ROWCOUNT;   -- la cuenta del UPDATE que interesa al usuario

    COMMIT TRANSACTION;

    SET NOCOUNT OFF;
    SELECT
        'OK'                              'Estado',
        'Proceso finalizado sin errores'  'Mensaje',
        @filas                            'Registros actualizados';
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;

    SET NOCOUNT OFF;
    SELECT
        'ERROR'             'Estado',
        ERROR_MESSAGE()     'Mensaje',
        ERROR_NUMBER()      'Número',
        ERROR_SEVERITY()    'Severidad',
        ERROR_STATE()       'Estado SQL',
        ERROR_LINE()        'Línea',
        ERROR_PROCEDURE()   'Procedimiento';
END CATCH

Al rellenar

Cambia la etiqueta 'Registros actualizados' por algo del dominio del proceso ('Facturas marcadas OK', 'Tramos actualizados'...) — el usuario que vea un 0 tiene que poder entender qué significa. Y recuerda que en los comentarios no puede haber : ni [...].