****************** EXEC的用法 **********************
declare @sqlStr varchar(4000)
set @sqlStr = 'xxxxx'
exec @sqlStr -- 执行存储过程
exec (@sqlStr) -- 执行sql语句
****************** sp_executesql的用法 *********************
sql2005中引入的新的系统存储过程,用来处理动态sql
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out ,@id
@sql 拼成的动态sql
N'@count int out,@id varchar(20)' 拼成的动态sql内的参数列表
@cou out,@id 为动态sql内参数列表提供值的外部参数列表
****************** EXEC 与 sp_executesql的比较 *********************
declare @sqlStr varchar(4000)
declare @sWhere nvarchar(4000)
declare @resultNum int = 0 output
set @sqlStr = 'select @resultNum = count(*) from Table1' + @sWhere --变量应在字符串外,如 @sWhere
exec (@sqlStr) --字符串内的变量 @resultNum 将导致异常
exec sp_executesql @sqlStr,N'@resultNum int OUTPUT',@resultNum OUTPUT --正常执行
declare @sqlStr varchar(4000)
set @sqlStr = 'xxxxx'
exec @sqlStr -- 执行存储过程
exec (@sqlStr) -- 执行sql语句
****************** sp_executesql的用法 *********************
sql2005中引入的新的系统存储过程,用来处理动态sql
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out ,@id
@sql 拼成的动态sql
N'@count int out,@id varchar(20)' 拼成的动态sql内的参数列表
@cou out,@id 为动态sql内参数列表提供值的外部参数列表
****************** EXEC 与 sp_executesql的比较 *********************
declare @sqlStr varchar(4000)
declare @sWhere nvarchar(4000)
declare @resultNum int = 0 output
set @sqlStr = 'select @resultNum = count(*) from Table1' + @sWhere --变量应在字符串外,如 @sWhere
exec (@sqlStr) --字符串内的变量 @resultNum 将导致异常
exec sp_executesql @sqlStr,N'@resultNum int OUTPUT',@resultNum OUTPUT --正常执行
ps:两者最大的区别是嵌入式的参数