Al menos un problema:debe rodear el valor de su cadena con comillas simples, y para escapar de las que están dentro de una cadena, debe duplicarlas:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
¡También puede declarar su variable @sql como algo más grande que 100 caracteres! Parece que tu cadena se está truncando.
Si los valores posibles para @pi_colName son finitos, el tipo de datos siempre es una cadena y las columnas son compatibles con la intercalación, podría hacer algo como esto y evitar el SQL dinámico:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;