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

SQL: обновить строку и вернуть значение столбца с помощью 1 запроса

Мне нужно обновить строку в таблице и получить из нее значение столбца. Я могу сделать это с помощью

UPDATE Items SET Clicks = Clicks + 1 WHERE Id = @Id;
SELECT Name FROM Items WHERE Id = @Id

Это генерирует 2 плана/обращения к таблице. Возможно ли в T-SQL изменить инструкцию UPDATE, чтобы обновить и вернуть столбец Name только с 1 планом/доступом?

Я использую методы С#, ADO.NET ExecuteScalar() или ExecuteReader().

4b9b3361

Ответ 1

Вы хотите OUTPUT

UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id

Ответ 2

Доступ к таблице только один раз:

UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;

Ответ 3

Если вы используете SQL Server 2005 и далее, предложение OUTPUT идеально подходит для этого

Ответ 4

Используйте для этого хранимую процедуру.

Ответ 5

Создайте хранимую процедуру, которая принимает значение @id как параметр и выполняет обе эти вещи. Затем вы можете использовать DbDataAdapter для вызова хранимой процедуры.

Ответ 6

Мне не удалось обновить и вернуть одну строку внутри оператора select. I.e вы не можете использовать выбранное значение из других ответов.

В моем случае я хотел использовать выбранное значение в запросе. Решение, которое я придумал, было:

declare @NextId int
set @NextId = (select Setting from Settings where key = 'NextId')

select @NextId + ROW_NUMBER() over (order by SomeColumnOfYourTable) from YourTable

update Settings set Setting = Setting + @@ROWCOUNT 
where key = 'NextId'