当前位置:Gxlcms > 数据库问题 > Yii2.0调用sql server存储过程并获取返回值

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

时间:2021-07-01 10:21:17 帮助过:33人阅读

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

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

$procedure_sql = "exec register_info ‘$name‘,‘$sex‘, ‘$idcard‘, ‘$phone‘, ‘$address‘, ‘$create_time‘";//调用sql server存储过程的sql语句
$procedure_command = $db->createCommand($procedure_sql);
$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、可以正常打印显示返回值。

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

标签:直接插入   框架   reg   datetime   _id   int   rollback   sql查询语句   验证   

人气教程排行