我正在尝试返回我在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,我怎么能得到这个?
答案 0 :(得分:49)
@@identity
和scope_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
答案 3 :(得分:-2)
如果您想查找与该更新匹配的记录,您应该选择
Select IdColumn
From ITS2_UserNames
WHERE @Customer_ID = TCID AND @Handle_ID = ID