05 December 2012

Condizioni di ricerca dinamiche in T-SQL

ALTER PROCEDURE [dbo].[RichiesteManutenzione_SelectAll_sp]
   @Stato AS nvarchar(10) = NULL
 , @DataDa AS datetime = NULL
 , @DataA AS datetime = NULL
 , @Manutentore AS nvarchar(50) = NULL
AS

BEGIN
 SET NOCOUNT ON

 DECLARE @paramlist AS nvarchar(4000)
 DECLARE @sqW AS nvarchar(4000)
 DECLARE @sq AS nvarchar(4000)


 -- IMPOSTA I PARAMETRI PER LA sp_executeSql
 SET @paramlist = N'
    @Stato AS nvarchar(10) = NULL
  , @DataDa AS datetime = NULL
  , @DataA AS datetime = NULL
  , @Manutentore AS nvarchar(50) = NULL
  '
  

 -- IMPOSTA FILTRI
 SET @sqW = ''

 IF @Stato IS NOT NULL
  SET @sqW = @sqW + N'AND Stato = @Stato '
  
 IF @DataDa IS NOT NULL AND @DataA IS NOT NULL
  SET @sqW = @sqW + N'AND DataIns BETWEEN @DataDa AND @DataA + 1 '
 
 IF @Manutentore IS NOT NULL
  SET @sqW = @sqW + N'AND Manutentore = @Manutentore '


 -- IMPOSTA QUERY
 SET @sq = N'
 SELECT a.Id, a.Stato, a.Richiesta, a.Note, a.Richiedente, 
   a.DataIns, a.DataProgramma, a.DataChiusura, a.IdMacchina, a.MacchinaDenominazione, 
   a.IdElemento, a.ElementoDenominazione, a.Manutentore, 
   LTRIM(ISNULL(a.RespInternoCognome, '''') + '' '' + ISNULL(a.RespInternoNome, '''')) AS RespInterno
 FROM RichiesteManutenzione_tb a '
 
 IF LTRIM(@sqW) <> ''
  SET @sq = @sq + N'WHERE 1 = 1 ' + @sqW + ' '
 
 SET @sq = @sq + N'ORDER BY a.Id'


 -- RESTITUISCE I RISULTATI 
 PRINT @sq
 EXEC sp_executeSql @sq, @paramlist
  , @Stato 
  , @DataDa 
  , @DataA 
  , @Manutentore 


END
GO