Подтвердить что ты не робот

Получение идентификатора строки, обновленной на сервере Sql

Я пытаюсь вернуть Id строки, которую я обновляю в 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 для ID, как я могу это получить?

4b9b3361

Ответ 1

@@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

Я думаю, что @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

Ответ 3

Не идентифицируете ли значение IDENTITY строки уже с @Handle_ID? Если да, то просто используйте:

  SELECT @@ERROR AS Error, @@ROWCOUNT AS RowsAffected, @Handle_ID AS ID;

Если нет, то можете ли вы объяснить, в каком столбце находится столбец IDENTITY?

Ответ 4

Хотелось бы упомянуть здесь, что если вы хотите взять затронутый первичный ключ строки в переменную, вы можете использовать предложение OUTPUT, которое может поместить это в табличную переменную. Выполните приведенные ниже инструкции, например...

CREATE TABLE ItemTable (ID INT IDENTITY (1,1), модель varchar (500) NULL, цветная VARCHAR (50) ноль)

INSERT INTO ItemTable (модель, цвет) ЦЕННОСТИ ("SomeModel", "Yellow")

INSERT INTO ItemTable (модель, цвет) ЦЕННОСТИ ("SomeModel", "Red")

INSERT INTO ItemTable (модель, цвет) ЦЕННОСТИ ("SomeModel", "Pink")

DECLARE @LastUpdateID TABLE (ItemID INT null)

ОБНОВЛЕНИЕ ItemTable SET model = 'abc' ВЫХОД INSERTED.ID INTO @LastUpdateID ГДЕ Цвет = "Красный"

ВЫБЕРИТЕ ItemID FROM @LastUpdateID

enter image description here

Ответ 5

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

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