Ответ 1
Вы хотите OUTPUT
UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
Мне нужно обновить строку в таблице и получить из нее значение столбца. Я могу сделать это с помощью
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()
.
Вы хотите OUTPUT
UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
Доступ к таблице только один раз:
UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;
Если вы используете SQL Server 2005 и далее, предложение OUTPUT идеально подходит для этого
Используйте для этого хранимую процедуру.
Создайте хранимую процедуру, которая принимает значение @id как параметр и выполняет обе эти вещи. Затем вы можете использовать DbDataAdapter для вызова хранимой процедуры.
Мне не удалось обновить и вернуть одну строку внутри оператора 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'