今天在处理一个问题时,使用到一个存储过程,是用于更新并获取最新ID的。在使用过程中,需要获取到这个ID并赋值给变量,结果用EXEC @ID = 存储过程的方式获取失败了。具体情况如下:

为了还原整个情况,先要做一些准备工作,首先,建立一个表,只有一个字段就是ID,并且插入一条数据
CREATE TABLE TABLE1
(
ID INT
)
GO
  INSERT INTO TABLE1
VALUES(1)

然后建立一个存储过程
CREATE PROCEDURE P_GETID
AS
BEGIN
UPDATE TABLE1 SET ID = ID+1
SELECT ID FROM TABLE1
END

其实说实话,这个存储过程真的没明白为啥非要这样写,用输出函数或者return变量都好呀,可是没办法,还就得用这个存储过程。当然,也可以直接把这两句弄出来直接用,
不过,谁让咱非要钻这个牛角尖来着。接着来吧。
开始使用EXEC @变量 = 存储过程 这种语句发现,没有成功。

郁闷啊,惆怅啊,纠结呀。这是啥情况呢?后来想明白了,这是返回的结果集,赋值给变量貌似真的会有问题的呢。
那这个存储过程返回的值怎么获取呢?
查了N多资料,看了好多有的没的,突然想起来用个表变量中转一下不就得了?

于是,开始尝试

首先声明一个表类型的变量,表结构和返回的结果集一样,
然后将存储过程返回的结果集插入到表变量中,
最后,从表变量查询字段赋值给变量。这样就可以了。

首先,我要说,这个存储过程的确够坑的,大家如果只是返回一个值,千万别用这种方式。
不过,能解决问题还是蛮开心的,真心涨知识了。

SQL SERVER 存储过程中SELECT 返回值如何赋值给变量的更多相关文章

  1. Yii2.0调用sql server存储过程并获取返回值

    1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...

  2. sql server存储过程中SELECT 与 SET 对变量赋值的区别

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...

  3. 【转】sql server存储过程中SELECT 与 SET 对变量赋值的区别

    转自:http://www.cnblogs.com/micheng11/archive/2008/07/08/1237905.html SQL Server 中对已经定义的变量赋值的方式用两种,分别是 ...

  4. sql server存储过程中SELECT 与 SET 对变量赋值的区别 转自Theo

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...

  5. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  6. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  7. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  8. SQL Server存储过程中防止线程重入处理方式

    对于线程重入,在C#中有lock关键字锁住一个SyncObject,而SQL Server也可用一个表来模拟实现. 先创建一个同步表,相当于C#中的SyncObject,并插入一条记录(初始值为1) ...

  9. 【转】SQL SERVER 存储过程中变量的作用域

    今天遇到一个很有趣的事情,以前没有注意过,所以记下来. 先来看例子. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE ...

随机推荐

  1. React Router 4.0 实现路由守卫

    在使用 Vue 或者 Angular 的时候,框架提供了路由守卫功能,用来在进入某个路有前进行一些校验工作,如果校验失败,就跳转到 404 或者登陆页面,比如 Vue 中的 beforeEnter 函 ...

  2. 成都Uber优步司机奖励政策(2月25日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. Hadoop: Text类和String类的比较

    一般认为Text类和String类是等价的,但二者之间其实存在着不小差别: 以<Hadoop权威指南>中的案例为例,给定字符串  String s = "\u0041\u00DF ...

  4. EDM站点

    设计邮件模版 http://templates.mailchimp.com/

  5. Redis系列三 Redis数据类型

    一 .Redis的五大数据类型 1.String(字符串) string是redis最基本的数据类型,可以理解成与 Memached一模一样的数据类型,一个key对应一个value. string 类 ...

  6. Filter配置多个url-pattern

    java开发中会用的Filter过滤器,有时候开发需要,在一个Filter中需要配置多个过滤地址,即<url-pattern>,下面就说一下一个Filter过滤器中多个<url-pa ...

  7. centos配置ip地址 添加多个ip地址的方法

    操作如下,登陆SSH: vi /etc/sysconfig/network-scripts/ifcfg-eth0: 第二个IP,就是 vi /etc/sysconfig/network-scripts ...

  8. Docker介绍及安装

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  9. hdu1231最大连续子序列(动态规划)

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  10. hdu1848Fibonacci again and again(sg函数)

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...