我想创建一个插入表中并返回其主键的过程。 表的主键是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
我该怎么做?
我可以使用输出变量吗?怎么样?
答案 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