Comme mentionné par MatBailie C'est beaucoup plus sûr puisqu'il ne s'agit pas d'une requête dynamique et qu'il y a moins de risques d'injection sql. J'ai ajouté une situation où vous voulez même que la clause where soit dynamique. XX YY sont les noms des colonnes
CREATE PROCEDURE [dbo].[DASH_getTP_under_TP]
(
@fromColumnName varchar(10) ,
@toColumnName varchar(10) ,
@ID varchar(10)
)
as
begin
-- this is the column required for where clause
declare @colname varchar(50)
set @colname=case @fromUserType
when 'XX' then 'XX'
when 'YY' then 'YY'
end
select SelectedColumnId from (
select
case @toColumnName
when 'XX' then tablename.XX
when 'YY' then tablename.YY
end as SelectedColumnId,
From tablename
where
(case @fromUserType
when 'XX' then XX
when 'YY' then YY
end)= ISNULL(@ID , @colname)
) as tbl1 group by SelectedColumnId
end
3 votes
Pourriez-vous sélectionner la meilleure réponse à cette question, la première réponse actuelle étant trompeuse.