Получение идентификатора строки, которую я обновил в Sql Server - PullRequest
22 голосов
/ 23 октября 2009

Я пытаюсь вернуть идентификатор строки, которую я обновляю в sql

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

и я продолжаю получать Null для удостоверения личности, как я могу получить это?

Ответы [ 3 ]

50 голосов
/ 23 октября 2009

@@identity и scope_identity() передаст вам идентификатор новой строки, т.е. после вставки. После вашего обновления строка идентифицируется как ... @Customer_ID или @Handle_Id? Если это другое поле, вы должны использовать предложение OUTPUT, чтобы вернуть идентификатор обновленной строки:

UPDATE ITS2_UserNames  
SET AupIp = @AupIp  
OUTPUT INSERTED.PrimaryKeyID
WHERE @Customer_ID = TCID AND @Handle_ID = ID
2 голосов
/ 17 марта 2019

Я думаю, что @pauloya пытался сказать:

если вы обновите таблицу, то у вас есть предложение WHERE, поэтому, если вы используете это же предложение where для выбора с INTO #tempTable, все ваши строки будут затронуты 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
0 голосов
/ 23 октября 2009

Если вы хотите узнать записи, которые соответствуют этому обновлению, вы должны сделать выбор с ним

Select IdColumn
From ITS2_UserNames
WHERE @Customer_ID = TCID AND @Handle_ID = ID  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...