在SQL Server中使用存储过程执行动态SQL命令的现实世界的优缺点是什么?
EXEC (@SQL)
对比
EXEC SP_EXECUTESQL @SQL
?
在SQL Server中使用存储过程执行动态SQL命令的现实世界的优缺点是什么?
EXEC (@SQL)
对比
EXEC SP_EXECUTESQL @SQL
?
sp_executesql
更有可能促进查询计划的重用。使用sp_executesql
时,参数在调用签名中被明确定义。这篇优秀的文章描述了这个过程。
许多动态 SQL 方面的常引用参考是 Erland Sommarskog 的必读之作:" The Curse and Blessings of Dynamic SQL"。
SP_EXECUTESQL的重要之处在于它允许您创建参数化查询,如果您关心SQL注入,这非常有用。
Microsoft的使用sp_executesql文章建议使用sp_executesql
而不是execute
语句。
由于此存储过程支持参数替换,因此sp_executesql比EXECUTE更具有灵活性; 而且,由于sp_executesql生成的执行计划更可能被SQL Server重用,所以它比EXECUTE更高效。
因此,要点是:不要使用execute
语句。使用sp_executesql
。
sp_executesql
替换execute
。也许我应该强调的重点是:尽可能使用sp_executesql
而不是execute
。 - Gan执行指令
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 声明为 varchar
或 nvarchar
。 - Weihui Guo