2013-07-19 35 views
5

muszę wrócić rzędu:Jak wybrać i zaktualizować w jednym zapytaniu?

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

ale jednocześnie muszę je zaktualizować:

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

i potrzebują wszystkie dane w tym wierszu

Jest to możliwe w to samo zapytanie?

+0

nie ma SQL Server ** 2010 ** - mamy 2000, 2005, 2008, 2008 i 2012 R2 dostępny, 2014 w rurociągu .... proszę zaktualizować tytuł –

+0

Użyj procedury przechowywanej. – Amy

+0

dziękuje, jest 2005 przepraszam –

Odpowiedz

8

Rozwiąż to!

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

Za pomocą procedury. W procedurze przechowywanej można wykonać dowolną liczbę zapytań.
Bez tego będziesz musiał wywołać wiele zapytań niezależnie.

Mam nadzieję, że to pomoże.

0

Wypróbuj poniższe zapytanie o aktualizację kolumny za pomocą pojedynczego zapytania.

zmiana [Tabela] Zestaw x = 1 gdzie x = (wybrać cte.x z (wybrać górna (1) * z [Tabela], gdzie x = 0 celu przez x desc) CTE)

Uwagi: - ale aktualizowana kolumna nie powinna być kolumna tożsamości

+0

, ale nie widać wyniku wyboru. –

1

Spróbuj

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 "(dotyczy 1 rzędu/wierszy)", ale nie zwraca wiersza. –

+0

Wypróbuj ten z cte jako (wybierz wierzchołek (1) * z [tabela] gdzie x = 0 kolejność według 1 desc) aktualizacja [tabela] zestaw x = 1 z cte dołączyć [tabela] c na c.id = cte.id dane wyjściowe wstawione. * ; – msi77

Powiązane problemy