zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    "无法在证书存储区中找到清单签名证书"的解决办法
    Windows消息ID说明
    ToolBar来的是什么事. (ToolBar 难见的Bug)
    SQL Tips 收集常用的SQL
    郁闷的内存泄露,增加TmfEditFormCmptMgr.OnDstMainSetFieldData惹的祸
    FormDestroy和Destroy中选其一个使用.
    一步步教你优化Delphi字串查找(转载)
    利用SQL建立数据库对象
    数据字典ChangeName引发的问题.
    测试Live Writer
  • 原文地址:https://www.cnblogs.com/PEPE/p/4303218.html
Copyright © 2011-2022 走看看