插入到表中,并使用过程返回值

本文关键字:过程 返回值 插入 | 更新日期: 2023-09-27 18:16:37

我想创建一个插入表并返回它的主键的过程。表的主键是uniqueidentyfire,它的guid是true

这是存储过程:

ALTER PROCEDURE [dbo].[pr_Tbl_Erae_Insert]
    @sfk_Dars varchar(20),
    @sfk_Ostad varchar(20),
    @byfk_Gerayesh tinyint,
    @ifk_term int,
    @guidErae_ID uniqueidentifier,
    @byGroup_Number tinyint,
AS
-- INSERT a new row in the table.
INSERT [dbo].[Tbl_Erae]
(
    [fk_Dars],
    [fk_Ostad],
    [fk_Gerayesh],
    [fk_term],
    [Erae_ID],
    [Group_Number]
)
VALUES
(
    @sfk_Dars,
    @sfk_Ostad,
    @byfk_Gerayesh,
    @ifk_term,
    ISNULL(@guidErae_ID, (newid())),
    @byGroup_Number
)

我需要返回Erae_Id时,它插入到表我怎么能做到这一点?

我可以使用from输出变量吗?如何?

插入到表中,并使用过程返回值

有一个OUTPUT子句可用,这取决于你的版本;然而,在这种情况下,单独处理可能更容易(因为只有一行):

IF @guidErae_ID IS NULL SET @guidErae_ID = NEWID()

则在INSERT中使用"原样"的@guidErae_ID(不使用ISNULL),然后以:

结尾:
SELECT @guidErae_ID

,使用var result = (Guid)command.ExecuteScalar(),或者在参数定义中将@guidErae_ID标记为OUTPUT,调用command.ExecuteNonQuery()后查询。

如果您需要返回您所包含的@guidErae_ID参数中的值,那么您需要将该参数标记为输出,然后在进程中设置它:

ALTER PROCEDURE [dbo].[pr_Tbl_Erae_Insert]
    @sfk_Dars varchar(20),
    @sfk_Ostad varchar(20),
    @byfk_Gerayesh tinyint,
    @ifk_term int,
    @guidErae_ID uniqueidentifier output,
    @byGroup_Number tinyint,
AS
If @guidErae_ID is null set @guidErae_ID = newid()
-- INSERT a new row in the table.
INSERT [dbo].[Tbl_Erae]
(
    [fk_Dars],
    [fk_Ostad],
    [fk_Gerayesh],
    [fk_term],
    [Erae_ID],
    [Group_Number]
)
VALUES
(
    @sfk_Dars,
    @sfk_Ostad,
    @byfk_Gerayesh,
    @ifk_term,
    @guidErae_ID,
    @byGroup_Number
)

在存储过程的末尾再添加一行,如下所示

return select Erae_Id WHERE [fk_Dars] = @sfk_Dars
    AND
    [fk_Ostad] = @sfk_Ostad
    AND
    [fk_Gerayesh] = @byfk_Gerayesh
    AND
    [fk_term] = @ifk_term
    AND
    [Group_Number] = @byGroup_Number