在我的数据库中,有一个带有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
答案 0 :(得分:1)
您需要 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
阅读以下主题以更好地理解
答案 1 :(得分:1)
使用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