SQL Server 2012对EXECUTE子句引入了WITH RESULT SETS选项,用于对EXECUTE语句执行的存储过程或者动态语句结果进行一个指定数据类型的转换,这样可以避免一种情况就是需要用临时表存储后再转换成目标表的数据字段类型,或者需要用OPENQUERY去转换。

用法:

IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'usp_TestWithResultSets' AND schema_id = schema_id('dbo'))
DROP PROCEDURE dbo.usp_TestWithResultSets
GO CREATE PROCEDURE dbo.usp_TestWithResultSets
AS
BEGIN SET NOCOUNT ON SELECT Num AS INT_COL, CHAR(NUM+64) AS STR_COL
FROM dbo.Numbers
WHERE NUM<=26 END
GO EXEC dbo.usp_TestWithResultSets
WITH RESULT SETS
(
(
COL1 INT NOT NULL,
COL2 INT NOT NULL
)
)

上面结果会报错,因为类型无法转换成功

Msg 8114, Level 16, State 2, Procedure usp_TestWithResultSets, Line 25
Error converting data type char(1) to int.

执行计划并没有多出类型转换多出的操作符/步骤

那么这种转换会不会多出很多CPU时间呢,毕竟要转换。那我们把行数调整为10000行来观察下

没有加上WITH RESULT SETS

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 173 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 173 ms.

加上WITH RESULT SETS

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 125 ms, elapsed time = 384 ms. SQL Server Execution Times:
CPU time = 125 ms, elapsed time = 384 ms.

SQL Server ->> WITH RESULT SETS子句的更多相关文章

  1. SQL Server里Grouping Sets的威力

    在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务 ...

  2. SQL Server里Grouping Sets的威力【转】

    在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务 ...

  3. SQL Server 基础 之 CASE 子句

    SELECT TOP 10 SalesOrderID, SalesOrderID % 10 AS 'Last Digit',-- 求最后一位的值 Position = CASE SalesOrderI ...

  4. [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

    今天遇到一个奇怪的问题,项目突然要从mysql切换到sql server数据库,包含order by 子句的嵌套子查询报错. 示例:select top 10 name,age,sex from ( ...

  5. Microsoft SQL Server Trace Flags

    Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...

  6. SQL Server

    1.通过触发器来级联删除: 具体的触发器代码如下: Create TRIGGER [dbo].[DeleteRelatedProducts] ON [dbo].[ProductCategory]  A ...

  7. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

  8. SQL Server中TOP子句可能导致的问题以及解决办法

    简介      在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性.      关系数据库中SQL语句只 ...

  9. SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数

    https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...

随机推荐

  1. iview 之 穿梭框 transfer

    概述 双栏穿梭选择框,常用于将多个项目从一边移动到另一边. 说明 Transfer 组件主要基于以下四个 API 来使用: :data:总体数据,数组,每项为一个对象,且必须含有 key 值,组件基于 ...

  2. js小仓库

    1.千分位分隔符 const toDecimalMark = num => num.toLocaleString("en-US"); console.log(toDecima ...

  3. Ubuntu禁用Compiz

    环境: Ubuntu 16.04 什么是Compiz: https://zh.wikipedia.org/wiki/Compiz ,简单理解是实现了Ubuntu的3D效果 禁用的好处: 节省内存和CP ...

  4. iis支持asp.net4.0的注册命令使用方法及部署网站注意事项

    如果没有按照正常的先装iis后装.net的顺序,可以使用以下命令重新注册一下,这样iis就可以支持asp.net 4.0了   32位的Windows: 1. 运行->cmd,打开窗口时请以管理 ...

  5. Docker搭建tomcat运行环境(修改镜像方式)

    对于java程序员来说,要想使用Docker来部署你的应用,那么在镜像中安装类似于tomcat的容器基本上是必须的(sprintboot项目除外),本篇介绍自己基于对centos镜像的修改,创建自己的 ...

  6. Respone笔记

    1 设置定时刷新的头 //设置定时刷新的头 response.setHeader("refresh", "5;url=http://www.baidu.com" ...

  7. 游戏中的网络同步机制——Lockstep(帧同步)

    本文来自: https://bindog.github.io/blog/2015/03/10/synchronization-in-multiplayer-networked-game-lockste ...

  8. mybatis 批量增加 Parameter '__frch_item_0' not found. Available parameters are [list]

    当在mybatis用到foreach的时候,会报这个错误Parameter '__frch_item_0' not found. Available parameters are [list]会出现的 ...

  9. Eclipse更改颜色主题

    通过在线安装的方式 Help -> Install New Software Work with: 输入 http://eclipse-color-theme.github.com/update ...

  10. 远程连接postgresql和redis设置

    1. 让Postgresql服务器被远程访问 1.1 编辑 pg_hba.conf,配置用户的访问权限 vi /etc/postgresql/8.4/main/pg_hba.conf 增加设置项 ho ...