获取我在Sql Server中更新的行的Id
我试图返回我在sql中更新的行的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标识将为您提供新行的标识。更
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