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 [...].