codice:
USE [Medart_SA2]
GO
/****** Object: StoredProcedure [dbo].[strOrganizzaGiornata2] Script Date: 12/07/2020 16:25:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
---
ALTER PROCEDURE [dbo].[strOrganizzaGiornata2]
@strDataX varchar(10),
@strStato varchar(2) ,
@strSenso varchar(4) ,
@strParametro varchar(1)
AS
BEGIN
SET NOCOUNT ON
-- per evitare SQL Injection, controlla che il parametro sia valido
IF @strParametro NOT IN ('0', '1','2','3','4','5','6','7')
BEGIN
RAISERROR('@strParametro non previsto: %s', 11, 1, @strParametro);
RETURN -1;
END
-- per evitare SQL Injection, controlla che la direzione dell'ordinamento sia valido
IF UPPER(@strSenso) NOT IN ('ASC','DESC')
BEGIN
RAISERROR('@strSenso non previsto: %s', 11, 1, @strSenso);
RETURN -1;
END
DECLARE @SQL AS NVARCHAR(MAX) -- contiene la stringa da eseguire
DECLARE @ORB AS NVARCHAR(MAX) -- contiene l'ordinamento
-- costruisce la query
SET @SQL=N'SELECT
D.RagioneSociale,
D.CognomeNomeDipendente,
D.DataSca,
D.TipoPrestazione,
D.Codice,
D.Luogo,
D.NomeMedico,
D.Stato,
D.ID,
D.IDAzienda,
D.IDDipendente,
D.IDMedico,
D.IDLuogoVisita,
D.DataPre,
D.Ora,
D.DataRegistrazione,
D.InServizio,
D.DataEff,
A.DataSospesa
FROM
TabDateDip D
INNER JOIN TabAziende A ON D.IDAzienda = A.ID
WHERE 1=1
AND D.DataSca<''@datta''
AND D.Stato=''@stato''
AND D.InServizio=''S''
ORDER BY '
-- stabilisce l'ordinamento in base al parametro passato
IF @strParametro='0' BEGIN SET @ORB=N'D.RagioneSociale @verso, D.CognomeNomeDipendente, D.Codice' END
IF @strParametro='1' BEGIN SET @ORB=N'D.CognomeNomeDipendente @verso, D.Codice' END
IF @strParametro='2' BEGIN SET @ORB=N'D.DataSca @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END --- modificato
IF @strParametro='3' BEGIN SET @ORB=N'D.TipoPrestazione @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END
IF @strParametro='4' BEGIN SET @ORB=N'D.Codice @verso, D.RagioneSociale, D.CognomeNomeDipendente' END
IF @strParametro='5' BEGIN SET @ORB=N'D.Luogo @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END
IF @strParametro='6' BEGIN SET @ORB=N'D.NomeMedico @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END
IF @strParametro='7' BEGIN SET @ORB=N'D.Stato @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END
-- cambia il verso dove è variabile (dove non è variabile resta ASC come default)
SET @ORB=REPLACE(@ORB, '@verso', @strSenso)
SET @SQL=REPLACE(@SQL, '@datta', @strDataX) --- aggiunto
SET @SQL=REPLACE(@SQL, '@stato', @strStato) --- aggiunto
-- ricostruisce la query con anche l'ordinamento
SET @SQL=@SQL + ' ' + @ORB
-- la stampa
PRINT @SQL
-- la esegue
EXEC sp_executesql @SQL
END