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

获取我在Sql Server中更新的行的Id,sql,sql-server,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,我如何才能获取它?在插入之后,@identity和scope\u标识将为您提供新行的标识。更

我试图返回我在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,我如何才能获取它?

在插入之后,@identity和scope\u标识将为您提供新行的标识。更新后,行的标识为@客户ID或@Handle\u ID?如果是其他字段,则应使用OUTPUT子句返回更新行的ID:

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

如果您想找到与该更新匹配的记录,您应该对其进行选择

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

我想@pauloya想说的是:

如果您要更新一个表,那么您就有一个WHERE子句,因此,如果您在select上使用同一WHERE子句和INTO TENTABLE,那么所有行都会受到更新的影响

所以你可以去:

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
您可以使用输出执行此操作,但必须声明一个变量表,如

DECLARE @tempTable TABLE ( ID INT );
然后使用输出


这里要提到的是,若您想在变量中获取受影响行的主键,那个么可以使用OUTPUT子句将其放入表变量中。执行以下语句,例如

创建表ItemTableID INT-IDENTITY1,1,型号varchar500 NULL,颜色VARCHAR50 NULL

插入ItemTableModel,颜色 值'SomeModel','Yellow'

插入ItemTableModel,颜色 值'SomeModel','Red'

插入ItemTableModel,颜色 值'SomeModel','Pink'

声明@LastUpdateID TABLEItemID INT null

更新项目表 集合模型='abc' 插入的输出.ID 进入@LastUpdateID 其中颜色=‘红色’

从@LastUpdateID中选择ItemID


我找不到任何证据表明这在SQL Server 2000上有效。。。不是从我的记忆,不是从任何博客帖子,也不是从官方文件。事实上,SQLServer2005在线丛书中有几个地方都在兜售新的输出子句。当我在2000年尝试上述方法时,我得到了一个语法错误,正如我所预料的那样。是什么让您相信这在SQLServer2000中有效?无论如何,这可能是一个没有实际意义的问题。希望有一种方法可以迫使问题包含版本信息。@Aaron:Code讨论了SCOPE_IDENTITY的使用,sry为了混淆,我删除了自己的一条评论,这打乱了意思。明白了,我花了半个小时试图弄清楚为什么在2000年,所有人都突然认为输出是受支持的。我只有99.99999%确定不是:-回答得好!如果要将输出转换为变量,只需声明一个表变量并使用into关键字。像这样:声明atmyTableVar TABLEid INT UPDATE。。。设置将插入的.PrimaryKeyID输出到atmyTableVar中,其中。。。我无法为变量编写@,因此仅当主键的数据类型为整数时,替换@标识和作用域标识才有效。如果您使用uniqueidentifier数据类型,那么我们必须使用OUTPUT Inserted。如果您正在更新列ur,并且选择on,那么这将不起作用
UPDATE ITS2_UserNames  
SET AupIp = @AupIp  
OUTPUT INSERTED.ID
INTO @tempTable
WHERE @Customer_ID = TCID AND @Handle_ID = ID