少なくとも1つの問題:文字列値を一重引用符で囲む必要があり、文字列内の値をエスケープするには、それらを2倍にする必要があります:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
@sql変数を100文字より大きいものとして宣言することもできます。文字列が切り捨てられているようです。
@pi_colNameの可能な値が有限であり、データ型が常に文字列であり、列が照合互換である場合、次のようなことを実行して動的SQLを回避できます。
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;