我有一个执行insert命令的存储过程 tst_student_sp 。在插入之后,我需要在另一个已经写入了不同存储过程 tst_user_sp 的表中插入相同的详细信息。当我尝试拨打 tst_user_sp 时,它无效。
ALTER PROCEDURE [dbo].[tst_student_sp]
@gid nvarchar(64)= null,
@student_firstname nvarchar(45) =null,
@student_lastname nvarchar(45) =null,
@dateof_birth datetime =null,
@dateof_join datetime =null,
@case_id integer =null,
@result int output
AS
SET NOCOUNT ON;
if @case_id=1
if @gid != ''
BEGIN
insert into tst_student(
student_gid,
student_firstname,
student_lastname,
dob,
doj
)values(
@gid,
@student_firstname,
@student_lastname,
@dateof_birth,
@dateof_join)
set @result=@@rowcount
if @result=1
BEGIN
EXEC dbo.tst_user_sp '4',@student_firstname,@student_lastname,'vcx102','s',2;
END
END
第二个存储过程:
ALTER PROCEDURE [dbo].[tst_user_sp]
@user_gid nvarchar(64)=null,
@fname nvarchar(45)=null,
@lname nvarchar(45)=null,
@user_id nvarchar(64) = null,
@pwd nvarchar(64) = null,
@class_gid nvarchar(64)=null,
@case_id integer=null
AS
SET NOCOUNT ON;
IF @case_id=2
BEGIN
INSERT INTO tst_user (user_gid,user_firstname,user_lastname,user_id,user_pwd,state)
values (@user_gid,@fname,@lname,@user_id,@pwd,'Active')
print @@rowcount
END
此部分编码未执行。表格仍为空。
set @result=@@rowcount
if @result=1
BEGIN
EXEC dbo.tst_user_sp '4',@student_firstname,@student_lastname,'vcx102','s',2;
END
答案 0 :(得分:1)
您错过了一个参数,因此@case_id
最终为null
。 null
不是2
,因此没有插入内容。
如果您不希望它们工作,请不要使用默认参数值。约束越多,这样的错误的可能性就越小。在所有参数中,您看起来并不希望中的任何缺失。所以删除这些默认值。
哦,'whatever'
是varchar
常量 - 对于nvarchar
,您想使用N'whatever'
。这里没有太大的区别,但它可能会让你错过指数,以及非本地人物:)
另外,请注意@@rowcount
。我不会使用它,除非你需要它(不是这种情况)并且很好地理解它是如何工作的 - 例如,使用触发器它非常棘手。即使是简单的set
分配,也会导致@@rowcount
更改为1
。阅读@@rowcount
会将其重置为0
。小心:)