2013-07-19 3 views
5

мне нужно возвращать строку:Как выбрать и обновить в одном запросе?

.NET[tableReturn] = select top(1) * from [table] where x = 0 order by desc 

, но в то же время мне нужно обновить его:

update [table] set x = 1 where [id] = .NET[tableReturn].[id] 

и нужны все данные этой строки

Можно в такой же запрос?

+0

Там нет SQL Server ** 2010 ** - у нас есть 2000, 2005, 2008, 2008 R2 и 2012 доступны, 2014 в трубопроводе .... пожалуйста, обновите свое название –

+0

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

+0

thanks, is 2005 sorry –

ответ

8

Успокойте это!

DECLARE @id int; 
SET @id = (select top(1) id from [table] where [x] = 0 order by id desc); 

select * from [table] where id = @id; 
update [table] set [x] = 20 where id = @id; 

: D

0

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

Надеюсь, это поможет.

0

Попробуйте выполнить приведенный ниже запрос для обновления столбца с помощью одного запроса.

обновление [таблица] множество х = 1, где х = (выбрать из cte.x (выберите сверху (1) * от [таблица], где х = 0 упорядочить по х по алфавиту) КТР)

Примечание: - Но обновленный столбец не должен быть столбец идентификаторов

+0

, но не показать результат выбора. –

1

Попробуйте

with cte as (select top(1) * from [table] where x=0 order by 1 desc) 
update [table] set x=1 from cte join [table] c on c.id =cte.id; 
+0

return "(затрагивается 1 строка (ы)), но не возвращает строку. –

+0

Попробуйте это с cte as (выберите верх (1) * из [таблицы] где x = 0 по 1 раз) обновление [таблица] набор x = 1 из cte join [таблица] c по c.id = cte.id выставляется. * ; – msi77

Смежные вопросы