Przynajmniej jeden problem:powinieneś otoczyć swoją wartość ciągu pojedynczymi cudzysłowami, a aby uciec od tych wewnątrz ciągu, musisz je podwoić:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Możesz również zadeklarować swoją zmienną @sql jako coś większego niż 100 znaków! Wygląda na to, że Twój ciąg jest obcinany.
Jeśli możliwe wartości @pi_colName są skończone, typ danych to zawsze łańcuch, a kolumny są zgodne z sortowaniem, możesz zrobić coś takiego i uniknąć dynamicznego SQL:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;