如何从动态表namename中获取插入的记录id并输出该id

问题描述 投票:0回答:1
ALTER PROC Experience
  @Subject1 INT
 ,@Subject2 INT
 ,@TableNumber INT
 ,@IDR INT OUTPUT
  AS
  BEGIN
  DECLARE @CMDS VARCHAR(MAX);           
        DECLARE @Subj1 VARCHAR(10);
        SET @Subj1=CONVERT(varchar(10),@Subject1);
        DECLARE @Subj2 VARCHAR(10);
        SET @Subj2=CONVERT(varchar(10),@Subject2);       
        DECLARE @TableNames VARCHAR(100);       
        SET @TableNames='TableNo_'+CONVERT(varchar(50),@TableNumber);          
        SET @CMDS='INSERT INTO '+@TableNames+' (@Subject1,@Subject1) VALUES('''+@Subj1+''','''+@Subj2+''');'
        EXEC (@CMDS);
  SELECT @IDR =  SCOPE_IDENTITY();  
  END

插入不是问题,它正在工作,但我无法获取最后插入的 id,并且无法将其作为输出发布。我正在使用 mssql 和存储过程(SELECT @IDR = SCOPE_IDENTITY() 并输出此值)

post stored-procedures dynamic output return-value
1个回答
0
投票

试试这个:

ALTER PROCEDURE Experience
  @Subject1 INT,
  @Subject2 INT,
  @TableNumber INT,
  @IDR INT OUTPUT
AS
BEGIN
  DECLARE @CMDS NVARCHAR(MAX);
  DECLARE @Subj1 NVARCHAR(10), @Subj2 NVARCHAR(10), @TableNames NVARCHAR(100);

  SET @Subj1 = CONVERT(NVARCHAR(10), @Subject1);
  SET @Subj2 = CONVERT(NVARCHAR(10), @Subject2);
  SET @TableNames = N'TableNo_' + CONVERT(NVARCHAR(50), @TableNumber);

  SET @CMDS = N'INSERT INTO ' + @TableNames + ' (Subject1, Subject2) VALUES (' + @Subj1 + ',' + @Subj2 + '); 
                SELECT @IDR = SCOPE_IDENTITY();';

  EXEC sp_executesql @CMDS, N'@IDR INT OUTPUT', @IDR OUTPUT;

  -- Output the ID for the caller
  SELECT @IDR;
END
© www.soinside.com 2019 - 2024. All rights reserved.