¿Cuál es la ventaja de usar @ParmDefinition en sp_executesql

DECLARE @id int
DECLARE @name nvarchar(20)
SET @id = 5
SET @name = 'Paul'

¿Cuál es la diferencia entre estas dos opciones?

Set @SQLQueryInnen = 'SELECT * FROM someTable WHERE ID = ' + @id + ' AND NAME = ''' + @name + ''''
Execute sp_Executesql @SQLQueryInnen

y

Set @SQLQueryInnen = 'SELECT * FROM someTable WHERE ID = @id AND NAME = @name'
Set @ParmDefinition = '@id int, @name nvarchar(20)'
Execute sp_Executesql @SQLQueryInnen, @ParmDefinition, @id

Hasta ahora solo veo el overhad para declarar el tipo de datos de @id y @name dos veces, cuando uso @ParmDefinition. Por otro lado, la "construcción de cadenas" parece un poco más fácil con @ParamDefinition.

Respuestas a la pregunta(3)

Su respuesta a la pregunta