经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
Yii2.0调用sql server存储过程并获取返回值
来源:cnblogs  作者:Rover_Lee  时间:2018/11/25 19:53:05  对本文有异议

1、首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用。

  1. 1 SET ANSI_NULLS ON
  2. 2 GO
  3. 3 SET QUOTED_IDENTIFIER ON
  4. 4 GO
  5. 5
  6. 6 CREATE PROCEDURE [dbo].[register_info]
  7. 7 @name varchar(50),
  8. 8 @sex char(1),
  9. 9 @idcard char(30),
  10. 10 @phone varchar(15),
  11. 11 @address varchar(100),
  12. 12 @create_time datetime
  13. 13 AS
  14. 14 BEGIN
  15. 15
  16. 16 DECLARE @register_id varchar(14);
  17. 17
  18. 18 BEGIN TRY
  19. 19 BEGIN TRANSACTION;
  20. 20 --插入注册信息,这里未做任何验证,直接插入
  21. 21 INSERT into register_info (name, sex, idcard, phone, address, create_time)
  22. 22 VALUES (@name, @sex, @idcard, @phone, @address, @create_time);
  23. 23
  24. 24 COMMIT TRANSACTION;
  25. 25 END TRY
  26. 26 BEGIN CATCH
  27. 27 IF (XACT_STATE()) = -1 --处理错误
  28. 28 BEGIN
  29. 29 --回滚
  30. 30 ROLLBACK TRANSACTION;
  31. 31 set @register_id = '0'
  32. 32 END;
  33. 33 IF (XACT_STATE()) = 1 --处理死锁
  34. 34 BEGIN
  35. 35 --提交
  36. 36 COMMIT TRANSACTION;
  37. 37 END;
  38. 38 END CATCH
  39. 39
  40. 40 select @register_id as register_id
  41. 41 END

2、在Yii2.0框架中调用sql server存储过程,和执行MySQL查询语句一样,sql语句的书写格式需要和调用执行sql server存储过程的书写格式一致。

  1. $procedure_sql = "exec register_info '$name','$sex', '$idcard', '$phone', '$address', '$create_time'";//调用sql server存储过程的sql语句
  2. $procedure_command = $db->createCommand($procedure_sql);
  3. $result = $procedure_command->queryOne();//获取返回值

使用var_dump打印 $result,发现报错:

SQLSTATE[IMSSP]: The active result for the query contains no fields.

3、在SQL Server数据库调用存储过程,发现是可以正常调用,并有返回值的。

而在yii2.0中调用,却报错,查阅资料,发现是因为储存过程执行后,还会返回影响行数而导致的问题。

4、修改存储过程,在存储过程体开头加入"set nocount on"以消除DML语句对返回结果的影响。

5、重复第二步操作,在yii2.0框架中重新调用执行 sql server 存储过程,并打印 $result:

6、可以正常打印显示返回值。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号