No te preocupes- esta respuesta es tambien definitivamente la ultima mia!
Lo que Pinal ha escrito en su entrada
refiere a la ejecución de SP_ExecuteSQL en la siguiente manera:
Código SQL:
Ver originalEXEC SP_ExecuteSQL @stmt=N'Select * From sys.objects Where schema_id=@Schema_id',
@params=N'@Schema_id Int',
@Schema_id=4;
Así el rendimiento mejora porque el sistema no va a crear un nuevo plan de ejecución si lo ejecutas otra vez con otro valor (@Schema_id=1) y va a utilizar el plan almacenado en el Cache.
Si la ejecutas así
Código SQL:
Ver originalEXEC SP_ExecuteSQL @stmt=N'Select * From sys.objects Where schema_id=4';
el sistema va a crear un nuevo plan para cada valor, lo mismo como con Exec(...).
La segunda ventaja es la seguridad: cuando utilizamos SP_ExecuteSQL con @params - evitamos el peligro de SQL Injection.
Lamentablemente- en el caso de crear tablas dinamicamente no podemos aprovechar estas ventajas porque no podemos utilizar el @params.
Como "regla de pulgar" - tienes razón,
aunque en el caso de crear tablas - se puede utilizar ambos.
Muchas gracias por tu paciencia y cortesía.