[英]Stored Procedure return default value?
在我的数据库中,有一个带有 INSERT INTO 语句的存储过程。 问题是我希望这个存储过程会返回StudentCode的默认值,我认为使用SELECT TOP 1语句来获取这个值是不可能的,因为可能会有多行同时插入。 任何帮助或建议? 非常感谢
ALTER PROC [dbo].[AddStudent]
@StudentName NVARCHAR(255),
@DoB DATETIME,
@Parent NVARCHAR(255),
@ParentContact VARCHAR(16),
@Address NVARCHAR(255),
@Class VARCHAR(6),
AS
INSERT INTO dbo.Student
( StudentCode , --I set default this column
StudentName,
DateOfBirth
NameParrent ,
PhoneContact ,
AddressParent ,
Class ,
)
VALUES ( DEFAULT , --StudentCode varchar(5)
@StudentName, --StudentName nvarchar(255)
@DoB, --DateOfBirth datetime
@Parent, --NameParrent nvarchar(255)
@ParentContact, --PhoneContact varchar(16)
@Address, --AddressParent nvarchar(255)
@Class --Class varchar(6)
)
-- How to return StudentCode field
您需要Return value after INSERT
DECLARE @generated_StudentCode table(StudentCode varchar(5))
INSERT INTO dbo.Student
( StudentCode, --I set default this column
StudentName,
DateOfBirth
NameParrent ,
PhoneContact ,
AddressParent ,
Class ,
)
OUTPUT inserted.StudentCode INTO @generated_keys
VALUES ( DEFAULT , --StudentCode varchar(5)
@StudentName, --StudentName nvarchar(255)
@DoB, --DateOfBirth datetime
@Parent, --NameParrent nvarchar(255)
@ParentContact, --PhoneContact varchar(16)
@Address, --AddressParent nvarchar(255)
@Class --Class varchar(6)
)
SELECT TOP 1 * FROM @generated_StudentCode
阅读以下线程以更好地理解
使用OUTPUT INSERTED子句,如官方文档中所述:-
插入
是列前缀,指定插入或更新操作添加的值。 以 INSERTED 为前缀的列反映了 UPDATE、INSERT 或 MERGE 语句完成之后但在触发器执行之前的值。
所以你的代码将是这样的:-(未经测试,但它会引导你获得准确的代码)
ALTER PROC [dbo].[AddStudent]
@StudentName NVARCHAR(255),
@DoB DATETIME,
@Parent NVARCHAR(255),
@ParentContact VARCHAR(16),
@Address NVARCHAR(255),
@Class VARCHAR(6),
AS
DECLARE @StudentCodeInserted varchar(5)
INSERT INTO dbo.Student
( StudentCode, --I set default this column
StudentName,
DateOfBirth
NameParrent ,
PhoneContact ,
AddressParent ,
Class
)
OUTPUT inserted.StudentCode INTO @StudentCodeInserted
VALUES ( DEFAULT , --StudentCode varchar(5)
@StudentName, --StudentName nvarchar(255)
@DoB, --DateOfBirth datetime
@Parent, --NameParrent nvarchar(255)
@ParentContact, --PhoneContact varchar(16)
@Address, --AddressParent nvarchar(255)
@Class --Class varchar(6)
)
Select @StudentCodeInserted as StudentCodeInserted
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.