Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return NEWSEQUENTIALID() as an output parameter

Tags:

sql

sql-server

Imagine a table that looks like this:

CREATE TABLE [dbo].[test](
     [id] [uniqueidentifier] NULL,
     [name] [varchar](50) NULL
)

GO

ALTER TABLE [dbo].[test] ADD  CONSTRAINT [DF_test_id]  DEFAULT (newsequentialid()) FOR [id]
GO

With an INSERT stored procedure that looks like this:

CREATE PROCEDURE [Insert_test]
    @name as varchar(50),
    @id as uniqueidentifier OUTPUT
AS
BEGIN
    INSERT INTO test(
        name
    )
    VALUES(
        @name
    )
END

What is the best way to get the GUID that was just inserted and return it as an output parameter?

like image 999
Phil Scholtes Avatar asked Jul 26 '10 13:07

Phil Scholtes


1 Answers

Use the Output clause of the Insert statement.

CREATE PROCEDURE [Insert_test]
    @name as varchar(50),
    @id as uniqueidentifier OUTPUT
AS
BEGIN
    declare @returnid table (id uniqueidentifier)

    INSERT INTO test(
        name
    )
    output inserted.id into @returnid
    VALUES(
        @name
    )

    select @id = r.id from @returnid r
END
GO

/* Test the Procedure */
declare @myid uniqueidentifier
exec insert_test 'dummy', @myid output
select @myid
like image 89
Joe Stefanelli Avatar answered Oct 20 '22 04:10

Joe Stefanelli