Não faça consultas dinâmicas construindo strings e executando-as.
Use
sp_executesql
e passar parâmetros como parâmetros. Você verá que a injeção de sql não existe mais.
EDITAR :desculpe, eu estava com pressa e escrevi o comando errado. não é sp_execute, é sp_executesql; leva uma string e um conjunto de parâmetros:toda a codificação e escape dos parâmetros é feita pelo SQL Server.
EDIT2 :explicação da instrução sp_executesql