SQL – Condition dynamic dans la clause Where

J'ai le proc stocké suivant. Le problème que j'ai est avec le paramètre "conditions". Fondamentalement chaque condition est sa propre colonne de sorte qu'il est passé comme ceci-

@Conditions = 'ET hcc_108 = 1 ET …' etc.

J'essaie de faire quelque chose comme ça …

ALTER PROC [dbo].[GetPatientPanelList] ( @CareProviderId int=null, @Patient nvarchar(60)=null, @Conditions varchar=null, @LocationId int=null ) AS if @Conditions is null SELECT * FROM vw_patient_atsortingbutes t1 INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2 ON t1.PatientID = t2.emr_id WHERE (t1.PreferredServiceLocationID = @LocationId OR @LocationId IS NULL) AND (t1.CareProviderID = @CareProviderId OR @CareProviderId IS NULL) AND (t1.FullName like '%' + @Patient + '%' OR @Patient IS NULL) else SELECT * FROM vw_patient_atsortingbutes t1 INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2 ON t1.PatientID = t2.emr_id WHERE (t1.PreferredServiceLocationID = @LocationId OR @LocationId IS NULL) AND (t1.CareProviderID = @CareProviderId OR @CareProviderId IS NULL) AND (t1.FullName like '%' + @Patient + '%' OR @Patient IS NULL) + @Conditions 

J'ai juste besoin de la dernière condition ET pour remplir en fonction du paramètre. Je comprends que le "+" est l'erreur de syntaxe, mais je n'arrive pas à find un moyen de la mettre en œuvre.

Merci!

Mettre à jour

J'ai essayé dynamic SQL, mais il ne cesse de dire "Commande (s) terminée avec succès)"

Voici mon code actuel. J'ai écrit ceci dans une window séparée pour commencer à faire fonctionner la requête.

 DECLARE @where nvarchar(50) = ' and hcc_18 = 1' ,@sql nvarchar(MAX) , @CareProviderId int=null, @Patient nvarchar(60)=null, @LocationId int=null set @sql = 'select * FROM vw_patient_atsortingbutes t1 INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2 ON t1.PatientID = t2.emr_id WHERE t1.PreferredServiceLocationID = IsNull('+ convert(varchar,@LocationId) +',t1.PreferredServiceLocationID) AND (t1.CareProviderID = isnull(' + convert(varchar,@CareProviderId)+ ', t1.CareProviderID) AND (t1.FullName like %' + @Patient + '% OR ' + @Patient + ' IS NULL)' + @where exec(@sql) 

J'ai corrigé les problèmes de syntaxe dans votre dernière mise à jour. Cela devrait fonctionner …

 DECLARE @where nvarchar(50) = ' and hcc_18 = 1' ,@sql nvarchar(MAX) , @CareProviderId int=null, @Patient nvarchar(60)=null, @LocationId int=null set @sql = 'select * FROM vw_patient_atsortingbutes t1 INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2 ON t1.PatientID = t2.emr_id WHERE t1.PreferredServiceLocationID = case when '+ convert(varchar(8),isnull(@LocationId,0)) +' = 0 then t1.PreferredServiceLocationID else ' + convert(varchar,isnull(@LocationId,0)) + ' end AND (t1.CareProviderID = case when ' + convert(varchar,isnull(@CareProviderId,0)) + ' = 0 then t1.CareProviderID else ' + convert(varchar,isnull(@CareProviderId,0)) + ' end AND (t1.FullName like ''%' + isnull(@Patient,'') + '%'' OR ' + isnull(@Patient,0) + '=0)' + @where print(@sql) --exec(@sql)