SQL: обновить строку и вернуть значение столбца с 1 запросом - PullRequest
50 голосов
/ 31 марта 2009

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

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

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

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

Ответы [ 6 ]

92 голосов
/ 31 марта 2009

Вы хотите предложение OUTPUT

UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
18 голосов
/ 31 марта 2009

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

UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;
3 голосов
/ 31 марта 2009

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

0 голосов
/ 31 октября 2017

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

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

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'
0 голосов
/ 31 марта 2009

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

0 голосов
/ 31 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...