在存储过程之间调用

时间:2015-02-11 07:03:34

标签: sql sql-server

我有一个执行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

1 个答案:

答案 0 :(得分:1)

您错过了一个参数,因此@case_id最终为nullnull不是2,因此没有插入内容。

如果您不希望它们工作,请不要使用默认参数值。约束越多,这样的错误的可能性就越小。在所有参数中,您看起来并不希望中的任何缺失。所以删除这些默认值。

哦,'whatever'varchar常量 - 对于nvarchar,您想使用N'whatever'。这里没有太大的区别,但它可能会让你错过指数,以及非本地人物:)

另外,请注意@@rowcount。我不会使用它,除非你需要它(不是这种情况)并且很好地理解它是如何工作的 - 例如,使用触发器它非常棘手。即使是简单的set分配,也会导致@@rowcount更改为1。阅读@@rowcount会将其重置为0。小心:)

相关问题