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查询语句 验证