Alespoň jeden problém:hodnotu řetězce byste měli obklopovat jednoduchými uvozovkami, a chcete-li uniknout těm v řetězci, musíte je zdvojnásobit:
WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...
Můžete také chtít deklarovat svou proměnnou @sql jako něco většího než 100 znaků! Zdá se, že váš řetězec se ořezává.
Pokud jsou možné hodnoty pro @pi_colName konečné, datový typ je vždy řetězec a sloupce jsou kompatibilní s řazením, můžete udělat něco takového a vyhnout se dynamickému SQL:
SELECT ...
WHERE CASE @pi_colName
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END = @pi_ColValue;