sp_executesql 提供了输入输出接口,而EXEC没有。 sp_executesql能够重用执行计划,提高执行性能,还可以编写更安全的代码。
declare @TSql nvarchar(MAX),@DT1 datetime,@DT2 nvarchar(10),@id bigint set @id=1 set @TSql=N'select @DT1=getdate(),@DT2=convert(varchar(10),getdate(),120) where 1=@id' exec sp_executesql @TSql,N'@DT1 datetime out,@DT2 nvarchar(10) out,@id int',@DT1 out,@DT2 out,@id select @DT1,@DT2 print @TSql declare @DT nvarchar(10) set @id=1 select @DT=convert(varchar(10),getdate(),120) where 1=@id select @DT