1.前言

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;
通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。
还有一个最大的好处就是利用sp_executesql,能够重用执行计划,
这就大大提供了执行性能(对于这个我在后面的例子中会详加说明),
还可以编写更安全的代码。EXEC在某些情况下会更灵活。
除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.

2.EXEC的使用

EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
SET @TableName = 'wolf_example';
SET @Num = 20038;
EXEC('SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC') --正常 SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC';
EXEC(@sql); --异常

3.sp_executesql的使用

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
SET @TableName = 'wolf_example';
SET @Num = 20038;
SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ CAST(@Num as varchar(10)) +' ORDER BY Num DESC';
EXEC sp_executesql @sql; --正常
DECLARE @Sql NVARCHAR(MAX);
DECLARE @ONum as INT;
SET @Sql='SELECT @OutNum=num FROM wolf_example WHERE Num = @Num AND Name=@Name';
EXEC sp_executesql
@Sql,
N'@Num as INT,@Name as VARCHAR(50),@OutNum as INT OUTPUT',
@Num = 20038,
@Name= '',
@OutNum = @ONum OUTPUT
SELECT @ONum

Sql语句拼接(EXEC和sp_executesql的区别)的更多相关文章

  1. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...

  2. 【Sqlserver】SqlServer中EXEC 与 SP_EXECUTESQL的 区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法. 先建立一个表,并添加一些数据来进行演示: CREATE TABL ...

  3. EXEC与sp_executesql的区别及应用

    在项目中需要将内部DECLARE的参数通过EXEC赋值后再作为下面一个EXEC参数的时候,发现都使用EXEC时,问题就不是那么简单了.趁着没有睡意研究下.EXEC的使用与缺点EXEC命令有两种用法,一 ...

  4. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  5. 长sql 语句拼接

    长sql 语句拼接

  6. 用字符串连接SQL语句并用EXEC执行时,出现名称 '‘不是有效的标识符

    原文:用字符串连接SQL语句并用EXEC执行时,出现名称 ''不是有效的标识符 用字符串连接SQL语句并用EXEC执行时,出现名称 '这里是字符串连接的一条SQL语句‘不是有效的标识符 才发现,在写e ...

  7. Java web实现综合查询+SQL语句拼接

    首先展示图形界: 界面比较简单,但麻雀虽小五脏俱全.因为数据库只有六种数据类型,所以最多添加六个查询框. 测试以下问题: 删除方式是从上往下开始的,如果删除之后会有问题.(后续改进ing) 若干个并且 ...

  8. SQL语句中in 与 exists的区别

    SQL语句中in 与 exists的区别 SQL中EXISTS检查是否有结果,判断是否有记录,返回的是一个布尔型(true/false); IN是对结果值进行比较,判断一个字段是否存在于几个值的范围中 ...

  9. EXEC 和 SP_EXECUTESQL的区别

    摘要: MSSQL为我们提供了两种动态执行sql语句的命令:EXEC 和 SP_EXECUTESQL.通常SP_EXECUTESQL更具优势,因为它提供了输入输出的接口,且能够重用执行计划,大大提高执 ...

随机推荐

  1. 卷积神经网络(matlab实现)

    卷积神经网络是看matlab 的一个toolbox入的门: https://github.com/rasmusbergpalm/DeepLearnToolbox 还有一篇原理推导文献,全是公式: ht ...

  2. 解决win10中chm内容显示为空白的问题

    在win10中打开chm文件,一般会是这个效果,内容显示为空白: 解决这个问题的方法是,在打开chm文件时,会有个安全警告的询问对话框,如下: 将[打开此文件前总是询问(W)]复选框的勾去掉,就OK了 ...

  3. git与eclipse集成之创建及切换个人本地分支

    创建个人本地特性分支,并进行编码 弹出选择分支的窗口,选择要切换的个人特性分支(备注:根据远程个人特性分支创建本地个人特性分支) 点击OK,Branch name:分支名称与远程分支名称相同,不需要修 ...

  4. 题解 SP26045 【GCDMAT2 - GCD OF MATRIX (hard)】

    承接一下洛咕上的题解,这里基本就是谈谈优化,放个代码的 我们发现这里的常数主要来自于除法,那么我们优化除法次数,把所有的 \(n/1...n/s\) (\(s=\sqrt n\))存下来,然后归并排( ...

  5. locale and system laungues

    In computing, a locale is a set of parameters that defines the user's language, region and any speci ...

  6. ubuntu 精简配置

    是这样的情况,在windows 7的vm虚拟机上装了Ubuntu 12.04 Desktop,主要是想用它的gui, 所以把不要的给删了. sudo apt-get -y --auto-remove ...

  7. C语言-社保工资查询系统

    一.简述 此次程序没有涉及函数,完成工资.保险和住房公积金税前税后的查询.工资和社保公积金算法是依据最新的北京标准计算. 五险一金标准: 税率: 1.输入编号1~6查询保险,然后再选择是依据税前工资还 ...

  8. Mvc 批量图片上传

    首先导入文件(官网上下载 kindeditor ): <link href="~/kindeditor-4.1.11-zh-CN/kindeditor/themes/default/d ...

  9. jquery中的attr与prop的区别,什么时候用attr,什么时候用prop

    只要有 Boolean() 属性的,简单说就是具有true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),(其实这些都是表单类的), ...

  10. swift 学习- 17 -- 析构器

    // 析构器 只适用与 类类型, 当一个类的实例被释放之前, 析构器会被立即调用, 析构器用关键字 deinit 来标示, 类似于构造器要用 init 来标示 // 析构过程原理 // Swift 会 ...