Ten minste één probleem:je moet je tekenreekswaarde omringen met enkele aanhalingstekens, en om te ontsnappen aan die binnen een tekenreeks, moet je ze verdubbelen:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Misschien wilt u uw @sql-variabele ook declareren als iets groter dan 100 tekens! Het lijkt erop dat je string wordt afgekapt.
Als de mogelijke waarden voor @pi_colName eindig zijn, het gegevenstype altijd string is en de kolommen compatibel zijn met sortering, dan zou je zoiets als dit kunnen doen en dynamische SQL vermijden:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;