exec vs sp_executesql

1、exec  vs  sp_executesql

  1.1 说到exec了解SQLServer的朋友第一反应应该是它用来执行存储过程,对的这是其一,另一个作用是执行一个动态批处理。总结下:a、执行一个存储过程 b、执行一条sql语句。

      1.2 sp_executesql

      SQL Server 2008 R2 联机丛书:执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

2、二者比较

  2.1、sp_executesql 支持替换 Transact-SQL 字符串中指定的任何参数值,但 EXECUTE 语句不支持。因此,由 sp_executesql 生成的 Transact-SQL 字符串比那些由 EXECUTE 语句生成的字符串更加相似。SQL Server 查询优化器可能将 sp_executesql 的 Transact-SQL 语句与以前所执行的语句的执行计划相匹配,从而节省编译新的执行计划的开销。

  2.2、使用 EXECUTE 语句,所有参数值都必须转换为字符或 Unicode,并成为 Transact-SQL 字符串的一部分。

  2.3、sp_executesql 可以单独使用 Transact-SQL 字符串来设置参数值

     

3、举个例子

    DECLARE @sql nvarchar(1000),--sql语句
    @value nvarchar(100),--sql返回值
    @company nvarchar(100),--公司名
    @account nvarchar(100) --登陆人
    SET @value=''
    SET @sql = 'SELECT @value=ID FROM RDPInfos WHERE Useable=1 and ConnectCompanyName=@company and ConnectUserName=@account'
    exec sp_executesql @sql,N'@value nvarchar(100) out,@company nvarchar(100),@account nvarchar(100)',@value out,@company,@account
    print @value--测试 输出 

说明:动态Sql的参数列表与外部提供值的参数列表顺序必需一致,如:

exec sp_executesql @sql,N'@value nvarchar(100) out,@company nvarchar(100),@account nvarchar(100)',@value out,@company,@account
原文地址:https://www.cnblogs.com/PEPE/p/4303218.html