Åtminstone ett problem:du bör omge ditt strängvärde med enstaka citattecken, och för att undvika dem i en sträng måste du dubbla dem:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Du kanske också vill deklarera din @sql-variabel som något större än 100 tecken! Det verkar som att din sträng blir trunkerad.
Om de möjliga värdena för @pi_colName är ändliga, datatypen alltid är sträng och kolumnerna är sorteringskompatibla, kan du göra något så här och undvika dynamisk SQL:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;