我试图返回我在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,我该如何获取它?
我试图返回我在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,我该如何获取它?
scope_identity()
会将新增行的标识符(identity)返回给您,即在插入之后。更新后,该行的标识符是... @Customer_ID还是@Handle_Id?如果它是不同的字段,则应使用OUTPUT子句返回更新行的ID:UPDATE ITS2_UserNames
SET AupIp = @AupIp
OUTPUT INSERTED.PrimaryKeyID
WHERE @Customer_ID = TCID AND @Handle_ID = ID
我认为@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
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
在这里提一下,如果你想把受影响的行的主键存入变量中,可以使用OUTPUT子句,将其放入表变量中。以下是示例执行语句...
CREATE TABLE ItemTable(ID INT IDENTITY(1,1), Model varchar(500) NULL, Color VARCHAR(50) null)
INSERT INTO ItemTable(Model, Color) VALUES('某型号', '黄色')
INSERT INTO ItemTable(Model, Color) VALUES('某型号', '红色')
INSERT INTO ItemTable(Model, Color) VALUES('某型号', '粉色')
DECLARE @LastUpdateID TABLE(ItemID INT null)
UPDATE ItemTable SET model = 'abc' OUTPUT INSERTED.ID INTO @LastUpdateID WHERE Color = '红色'
SELECT ItemID FROM @LastUpdateID
Select IdColumn
From ITS2_UserNames
WHERE @Customer_ID = TCID AND @Handle_ID = ID
@@identity
andscope_identy()
only works if datatype of primary key is integer. If you useuniqueidentifier
datatype then we must useOUTPUT INSERTED
- Bhavik Jani