参考:
http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html
http://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html

两种动态SQL
  1. EXEC (@sql)
  2. EXEC sp_executesql

性能:
sp_executesql提供了输入输出接口,更具有优势
sp_executesql根据参数重用执行计划,不需要每一次都重新编译,提高了执行性能; EXEC因为每次构建的@sql字符串不一样,必须重新编译
除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql

注意:(执行动态sql时候,防止sql注入攻击)

1. 使用EXEC(@sql)时,如果您想访问变量,必须把变量内容串联到动态构建的代码字符串中

declare @sql nvarchar(200)
declare @id varchar(20)
set @id=''
set @sql='select * from SMCN_CUList_China where Rownum_id = ' + @id
exec (@sql)

2. sp_executesql后面跟有三部份,分别是 @stmt, @params, params_assignment

declare @sql nvarchar(200)
declare @id varchar(20)
declare @count int
set @id=''
set @sql='select @count = count(1) from t_a where Rownum_id = @id'
exec sp_executesql @sql, N'@count int out,@id varchar(20)',@count out,@id
select @count

sp_executesql使用:

  sp_executesql要求动态Sql (即@stmt部分) 和动态Sql参数列表 (即@params部分) 必须是Nvarchar
  N'@count int out,@id varchar(20)' 是@stmt内的参数列表; @count out,@id 是为@params参数列表提供值的外部参数列表
  sp_executesql 参数列表@params与外部提供值的参数列表params_assignment的顺序必需一致; 如果不一致,必须显式标明,如 @id=@id, @count=@count out
  动态SQl的参数列表与外部提供参数的参数列表参数名可以同名

两种动态SQL的更多相关文章

  1. spring boot-mybatis三种动态sql(5)

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...

  2. mybatis的注解开发之三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...

  3. spring boot(8)-mybatis三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...

  4. 两种动态加载JavaScript文件的方法

    两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...

  5. IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称

    微软给了我们一个很好的工具用来使IIS安全的运行-------UrlScan,下面是它的配置文件介绍 [options]UseAllowVerbs=1                ; 若为1,则使用 ...

  6. 总结两种动态代理jdk代理和cglib代理

    动态代理 上篇文章讲了什么是代理模式,为什么用代理模式,从静态代理过渡到动态代理. 这里再简单总结一下 什么是代理模式,给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原 ...

  7. flask 操作mysql的两种方式-sql操作

    flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...

  8. SqlServer2008 数据库同步的两种方式(Sql JOB)

    尊重原著作:本文转载自http://www.cnblogs.com/tyb1222/archive/2011/05/27/2060075.html 数据库同步是一种比较常用的功能.下面介绍的就是数据库 ...

  9. java两种动态代理方式的理解

    要理解动态代理,不妨先来看看一个静态代理的例子. 一.静态代理 以一个电商项目的例子来说明问题,比如我定义了一个订单的接口IOrder,其中有一个方法时delivery,代码如下. package c ...

随机推荐

  1. Spring中你可能不知道的事(二)

    在上一节中,我介绍了Spring中极为重要的BeanPostProcessor BeanFactoryPostProcessor Import ImportSelector,还介绍了一些其他的零碎知识 ...

  2. 低延时的P2P HLS直播技术实践

    本文根据4月21日OSC源创会·武汉站的现场分享为蓝本,重新整理.以下是演讲内容: 近几年,随着直播.短视频等视频领域对带宽要求的提升以及CDN行业竞争的加剧,很多CDN公司开始往P2P-CDN方向发 ...

  3. 『Pushing Boxes 双重bfs』

    Pushing Boxes Description Imagine you are standing inside a two-dimensional maze composed of square ...

  4. redis 系列20 服务器下

    二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...

  5. Python 中包/模块的 `import` 操作

    版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...

  6. Chapter 4 Invitations——25

    "So you are trying to irritate me to death? Since Tyler's van didn't do the job?" "所以 ...

  7. leetcode — construct-binary-tree-from-inorder-and-postorder-traversal

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  8. 初识区块链——用JS构建你自己的区块链

    前言 区块链太复杂,那我们就讲点简单的.用JS来构建你自己的区块链系统,寥寥几行代码就可以说明区块链的底层数据结构.POW挖矿思想和交易过程等.当然了,真实的场景远远远比这复杂.本文的目的仅限于让大家 ...

  9. [九]JavaIO之ObjectInputStream 和 ObjectOutputStream

    序列化 序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程 序列化是一种轻量级的持久化,对象都是存活在内存中的,当JVM运行结束,对象便不存在 ...

  10. 百万级开源MQTT消息服务器 搭建

    下载地址:http://emqtt.com/downloads 文档地址:http://emqtt.com/docs/v2/index.html 开始使用EMQ 2.0 消息服务器简介EMQ (Erl ...