应该是output 
这两者的区别是,第一个使用动态SQL 语句,它的变量是在另一个会话中使用的,存储过程拿不到,但你可以使用这样的方式得到.
@sql  nvarchar(200)select @sql=N'select @c= sum(convert(int,sal)) from checker where a='''+@a+''''+@temp EXEC sp_executesql @_sql ,N'@c INT OUTPUT',@c  OUTPUT