插入表并使用过程返回值

时间:2011-12-05 12:53:47

标签: c# asp.net sql-server-2008 stored-procedures

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

这是存储过程:

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我该怎么做?

我可以使用输出变量吗?怎么样?

3 个答案:

答案 0 :(得分:2)

OUTPUT clause可用,具体取决于您的版本;但是,在这种情况下,可能更容易(因为你只有一行)来单独处理它:

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

然后在@guidErae_ID(不是INSERT)中使用ISNULL“按原样”,然后以:

结尾
SELECT @guidErae_ID

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

答案 1 :(得分:1)

如果需要返回已包含的@guidErae_ID参数中的值,则需要将参数标记为输出,然后在proc中设置:

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
)

答案 2 :(得分:0)

在存储过程结束时,只需添加一行,如下所示

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