Answers:
sp_executesql
更有可能促进查询计划的重用。使用时sp_executesql
,将在调用签名中显式标识参数。这篇优秀的文章描述了这一过程。
关于动态SQL的许多方面,经常引用的参考资料是Erland Sommarskog的必读内容:“ 动态SQL的诅咒和祝福 ”。
SP_EXECUTESQL的重要之处在于,它允许您创建参数化查询,如果您关心SQL注入,那将非常好。
Microsoft的《使用sp_executesql》一文建议使用sp_executesql
代替execute
语句。
因为此存储过程支持参数替换,所以sp_executesql比EXECUTE具有更多的用途;并且由于sp_executesql生成的执行计划更有可能被SQL Server重用,因此sp_executesql 比EXECUTE 更有效。
所以,带走:不要使用execute
statement。使用sp_executesql
。
sp_executesql
无法替代的情况execute
。也许我应该强调的重点是:使用sp_executesql
而不是execute
尽可能使用。
执行命令
declare @sql varchar (100)
set @sql ='select * from #td1'
if (@IsMonday+@IsTuesday !='')
begin
set @sql= @sql+' where PickupDay in ('''+@IsMonday+''','''+@IsTuesday+''' )'
end
exec( @sql)
int
动态SQL。需要注意的是@sql被声明为varchar
或nvarchar