Как получить последнее значение идентичности, используя sp_executesql в StoredProcedure? - PullRequest
0 голосов
/ 15 мая 2018

Я вставляю записи, используя stored procedure и sp_executesql. Как только я вставляю запись, используя sp_executesql, мне нужно последнее вставленное значение поля identity в этом сеансе.

ALTER proc [dbo].[spHoldTransaction] 


@RegisterNo int,
@StoreID int,
@Department varchar(50),
@TransactionDateFrom date,
@TransactionDateTo date,
@Comment Varchar(50)

AS
BEGIN

    DECLARE @RegisterID int;
    DECLARE @DatabaseName varchar(15);
    DECLARE @Batch int;


    SELECT @RegisterID=ID FROM Register WHERE Register.Number = @RegisterNo;

    SELECT @Batch = BatchNumber From Batch WHERE Status = 0 and RegisterID = @RegisterID


    SET @DatabaseName = 'xxx'

    SELECT  @Department=''''+REPLACE(@Department,',',''',''')+''''

    DECLARE @Qry nvarchar(MAX);

    DECLARE @ParamDefinition nvarchar(MAX);
    SET @ParamDefinition = N'@comment nvarchar(50),@StoreID int,@Batch int'

    SET @Qry = '
      INSERT INTO '+@DatabaseName+'.dbo.TransactionHold
     (
          [StoreID]       
          ,[HoldComment]          
          ,[BatchNumber]
          ,[ShippingNotes]
     )
     SELECT         
          @StoreID AS [StoreID]       
          ,@Comment AS [HoldComment]         
          ,@Batch AS [BatchNumber]
          ,'''' AS [ShippingNotes];       

     '

    EXECUTE sp_executesql @Qry, @ParamDefinition, @Comment, @StoreID, @Batch
    SELECT SCOPE_IDENTITY()

END

Когда я выполняю вышеописанную хранимую процедуру, она возвращается пустой. Но TransactionHold имеет идентификационный столбец Id

1 Ответ

0 голосов
/ 15 мая 2018

Попробуйте получить идентификатор в той же области действия процедуры sql execute и вернуть значение в качестве параметра OUT.Сделайте эти изменения:

SET @ParamDefinition = N'@comment nvarchar(50),@StoreID int,@Batch int, @identity int out'

SET @Qry = '
      INSERT INTO '+@DatabaseName+'.dbo.TransactionHold
     (
          [StoreID]       
          ,[HoldComment]          
          ,[BatchNumber]
          ,[ShippingNotes]
     )
     SELECT         
          @StoreID AS [StoreID]       
          ,@Comment AS [HoldComment]         
          ,@Batch AS [BatchNumber]
          ,'''' AS [ShippingNotes];       

     SET @identity = @@IDENTITY

     '

DECLARE @identity INT

EXECUTE sp_executesql @Qry, @ParamDefinition, @Comment, @StoreID, @Batch, @identity OUT

SELECT @identity
...