Mindestens ein Problem:Sie sollten Ihren String-Wert in einfache Anführungszeichen setzen, und um diese innerhalb eines Strings zu maskieren, müssen Sie sie verdoppeln:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Vielleicht möchten Sie Ihre @sql-Variable auch mit etwas mehr als 100 Zeichen deklarieren! Sieht so aus, als ob Ihre Zeichenfolge abgeschnitten wird.
Wenn die möglichen Werte für @pi_colName endlich sind, der Datentyp immer ein String ist und die Spalten kollationskompatibel sind, könnten Sie so etwas tun und dynamisches SQL vermeiden:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;