如果没有执行INSERT,如何为Identity返回NULL

时间:2018-06-05 12:59:34

标签: sql sql-server

我有两张桌子

CREATE TABLE Temp_1 
( 
ID Int IDENTITY(1,1), 
Name Varchar(500) 
) 

CREATE TABLE Temp_2 
( 
 ID Int IDENTITY(1,1), 
 Name Varchar(500) 
  ) 


  INSERT INTO Temp_1 
  SELECT 'CC' 

  INSERT INTO Temp_2 
  SELECT Name 
  FROM Temp_1 
  WHERE 2 = 1 

表Temp_2中没有插入。所以我对Temp_2表的SCOPE_IDENTITY()的预期输出为NULL。

如何将Temp_2的标识值设为null?

如果我们使用SCOPE_IDENTITY()或@@ IDENTITY,我们获得的身份值仅为表Temp_1。我们需要得到表Temp_2的标识值,即" null"因为Temp_2表中没有插入。

1 个答案:

答案 0 :(得分:4)

都不是。您想使用output子句:

  DECLARE @ids TABLE (id INT);

  INSERT INTO Temp_1 
      OUTPUT inserted.id INTO @ids
      SELECT 'CC' ;

这是会话安全,语句安全的多线程安全。它允许您处理多行插入。它允许您返回其他列。

没有理由使用任何其他方法。