获取我在Sql Server中更新的行的ID

时间:2009-10-22 23:02:59

标签: sql sql-server

我正在尝试返回我在sql中更新的行的Id

UPDATE ITS2_UserNames
  SET AupIp = @AupIp
  WHERE @Customer_ID = TCID AND @Handle_ID = ID

  SELECT @@ERROR AS Error, @@ROWCOUNT AS RowsAffected, SCOPE_IDENTITY() AS ID

我不断为ID获取Null,我怎么能得到这个?

4 个答案:

答案 0 :(得分:49)

@@identityscope_identity()将为您提供行的标识,即。插入后。更新后,行的标识是...... @Customer_ID或@Handle_Id?如果它是不同的字段,则应使用OUTPUT子句返回更新行的ID:

UPDATE ITS2_UserNames  
SET AupIp = @AupIp  
OUTPUT INSERTED.PrimaryKeyID
WHERE @Customer_ID = TCID AND @Handle_ID = ID

答案 1 :(得分:1)

我认为@pauloya想要说的是:

如果您要更新表,那么您将有一个WHERE子句,因此,如果在带有INTO #tempTable的select上使用相同的where子句,则所有行都将受UPDATE影响

所以你可以去

SELECT
    userName.ID
INTO #temp
FROM ITS2_UserNames AS userNames
WHERE @Customer_ID = TCID AND @Handle_ID = ID

然后您更新

UPDATE ITS2_UserNames
SET AupIp = @AupIp
WHERE @Customer_ID = TCID AND @Handle_ID = ID

最后,您可以返回受更新影响的所有ID

SELECT * FROM #temp

您可以使用OUTPUT进行此操作,但必须声明一个变量表,例如

DECLARE @tempTable TABLE ( ID INT );

然后您使用OUTPUT

UPDATE ITS2_UserNames  
SET AupIp = @AupIp  
OUTPUT INSERTED.ID
INTO @tempTable
WHERE @Customer_ID = TCID AND @Handle_ID = ID

答案 2 :(得分:0)

在这里想提一下,如果要在变量中使用受影响行的主键,则可以使用OUTPUT子句,可以将其放在表变量中。例如,执行以下语句...

创建表ItemTable(ID INT IDENTITY(1,1),Model varchar(500)NULL,Color VARCHAR(50)null)

插入项目表(型号,颜色) VALUES('SomeModel','Yellow')

插入项目表(型号,颜色) VALUES('SomeModel','Red')

插入项目表(型号,颜色) VALUES('SomeModel','Pink')

DECLARE @LastUpdateID TABLE(ItemID INT null)

更新ItemTable SET模型='abc' 输入的ID INTO @最后更新ID 颜色=“红色”

从@LastUpdateID中选择商品ID

enter image description here

答案 3 :(得分:-2)

如果您想查找与该更新匹配的记录,您应该选择

Select IdColumn
From ITS2_UserNames
WHERE @Customer_ID = TCID AND @Handle_ID = ID