繁体   English   中英

存储过程返回默认值?

[英]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

阅读以下线程以更好地理解

SQL Server - 插入后的返回值

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM