Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criando uma cláusula where dinâmica no procedimento armazenado do SQL Server


Pelo menos um problema:você deve cercar seu valor de string com aspas simples e, para escapar daqueles dentro de uma string, você precisa dobrá-los:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...

Você também pode declarar sua variável @sql como algo maior que 100 caracteres! Parece que sua string está sendo truncada.

Se os valores possíveis para @pi_colName forem finitos, o tipo de dados é sempre string e as colunas são compatíveis com agrupamento, você pode fazer algo assim e evitar SQL dinâmico:
SELECT ...
WHERE CASE @pi_colName 
  WHEN 'col1' THEN col1
  WHEN 'col2' THEN col2
END = @pi_ColValue;