Ít nhất một vấn đề:bạn nên đặt giá trị chuỗi của mình bằng dấu ngoặc kép và để thoát khỏi những giá trị bên trong chuỗi, bạn cần phải nhân đôi chúng lên:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Bạn cũng có thể muốn khai báo biến @sql của mình là biến lớn hơn 100 ký tự! Có vẻ như chuỗi của bạn đang bị cắt ngắn.
Nếu các giá trị có thể có cho @pi_colName là hữu hạn, kiểu dữ liệu luôn là chuỗi và các cột tương thích với đối chiếu, bạn có thể làm như thế này và tránh SQL động:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;