插入到表中,并使用过程返回值
本文关键字:过程 返回值 插入 | 更新日期: 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