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