Correct use of SCOPE_IDENTITY function within simple stored procedure

后端 未结 3 1810
野性不改
野性不改 2021-02-10 11:20

I\'d like to simply send some information from a simple client to a log file and then use the identity created for further processing.

Is the following use of SCOP

相关标签:
3条回答
  • 2021-02-10 11:47
    RETURN SCOPE_IDENTITY() 
    

    is returning a 0 with Dapper.
    I replaced it with

    SELECT SCOPE_IDENTITY()
    

    and now it is returning the actual value.

    0 讨论(0)
  • 2021-02-10 11:48

    Seems like this is the best approach - can see a few references advising to only use RETURN as a way of communicating state or errors so an OUTPUT parameter is better practice:

    ALTER PROCEDURE [dbo].[LogSearch]
        @userName      VARCHAR(50),
        @dateTimeStart DATETIME,
        @searchID      INT OUTPUT
    AS
    BEGIN
        SET NOCOUNT ON;
    
        INSERT INTO [WH].[dbo].[tb_Searches]
                    (
                    UserName,
                    DateTimeStart
                    )
        VALUES  
                    (
                    @userName, 
                    @dateTimeStart
                    );
    
        SET @searchID = SCOPE_IDENTITY();
    
    END;
    
    0 讨论(0)
  • 2021-02-10 11:52

    You can also use SCOPE_IDENTITY in two separate statements, such as:

    Assuming that the table has an identity field of course

    Insert into [ABCTable]
    ([A], [B])
    select 'WhateverA', 'WhateverB'
    

    Then use the function SCOPE_IDENTITY() in the Where clause, like:

    Update [ABCTable] Set [A] = 'UpdateA', [B] = 'UpdateB'
    Where IdentityField = SCOPE_IDENTITY()
    

    Thus, the scope_identity is a reliable link to the record just inserted.

    0 讨论(0)
提交回复
热议问题