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