从存储过程返回插入的行

时间:2016-11-16 16:15:18

标签: sql sql-server stored-procedures

我有以下存储过程

UIButton

是否有更有效的方法返回最后一个带有id和关联数据的插入记录?

4 个答案:

答案 0 :(得分:2)

output子句

中使用Inserted

正如下文所述:

CREATE PROCEDURE [dbo].[spInsert]
    @name nvarchar(128),
AS
DECLARE @MyTableVar table( 
                       Name varchar(50),
                       Identifier uniqueidentifier 
                       ;
    insert into NameIdentifier 
    ( Name, Identifier)
    values
    ( @name, NEWID());
     OUTPUT INSERTED.Name, INSERTED.Identifier
    INTO @MyTableVar
SELECt Name,Identifier from @MyTableVar

Refreance: Best way to get identity of inserted row?

答案 1 :(得分:1)

SCOPE_IDENTITY()用于获取范围内标识列中最后生成的标识值,对于GUID值,您可以在插入之前获取guid,就像我在下面的代码中所做的那样,或者您使用OUTPUT子句来获取Insert语句生成的guid。

CREATE PROCEDURE [dbo].[spInsert]
    @name nvarchar(128)
AS
BEGIN
  SET NOCOUNT ON;
  Declare @NewID UNIQUEIDENTIFIER =  NEWID();

    insert into NameIdentifier ( Name, Identifier)
    values( @name, @NewID);

SELECT * FROM NameAge where Id = @NewID;

END

答案 2 :(得分:-2)

这可以为您提供所需的功能。

UIView

编辑:这将返回新插入行的ID。

答案 3 :(得分:-2)

您可以通过使用SQL Server的输出子句来实现此目的,您可以阅读有关此here的更多信息

if exists (select 1 from sys.tables where name = 'NameIdentifier ')
    drop table NameIdentifier 
create table NameIdentifier 
(
    id BIGINT IDENTITY(1,1)
    ,Name VARCHAR(100)
    ,Identifier uniqueidentifier 
)

DECLARE @id TABLE 
(
    ID BIGINT
)

INSERT INTO NameIdentifier (Name,Identifier)
OUTPUT INSERTED.id INTO @id
VALUES('abcd',NEWID())

SELECT * FROM NameIdentifier N, @id I where N.id = I.id