存储过程返回默认值?

时间:2020-03-21 02:25:49

标签: sql sql-server

在我的数据库中,有一个带有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

2 个答案:

答案 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

阅读以下主题以更好地理解

SQL Server - Return value after INSERT

答案 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