prova questa

codice:
USE [Medart_SA2]GO
/****** Object:  StoredProcedure [dbo].[strOrganizzaGiornata]    Script Date: 11/07/2020 16:38:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--- 


ALTER PROCEDURE [dbo].[strOrganizzaGiornata]  
    @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<@strDataX 
			AND D.InServizio=''S'' 
			AND D.Stato=@strStato 
		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.Data @verso, D.RagioneSociale, D.CognomeNomeDipendente, D.Codice' END
	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)


	-- ricostruisce la query con anche l'ordinamento
	SET @SQL=@SQL + ' ' + @ORB


	-- la stampa
	PRINT  @SQL
	
	-- la esegue
	EXEC sp_executesql @SQL


END