2013-07-19 39 views
5

Tôi cần phải trả lại một vòng:Cách chọn và cập nhật trong một truy vấn?

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

nhưng đồng thời tôi cần phải cập nhật nó:

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

và cần tất cả dữ liệu của hàng này

Có thể trong cùng một truy vấn?

+0

không có SQL server ** 2010 ** - chúng tôi có 2000, 2005, 2008, 2008 R2 và 2012 có sẵn năm 2014 trong các đường ống .... vui lòng cập nhật tiêu đề của bạn –

+0

Sử dụng quy trình được lưu trữ. – Amy

+0

cảm ơn, là năm 2005 xin lỗi –

Trả lời

8

Giải quyết vấn đề này!

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

Sử dụng một thủ tục lưu trữ. Trong một thủ tục được lưu trữ, bạn có thể thực hiện nhiều truy vấn như bạn mong muốn.
Nếu không có, bạn sẽ phải gọi nhiều truy vấn một cách độc lập.

Hy vọng điều này sẽ hữu ích.

0

Hãy thử truy vấn bên dưới để cập nhật cột bằng một truy vấn.

cập nhật [table] set x = 1 trong đó x = (chọn cte.x từ (chọn hàng đầu (1) * từ [table] trong đó x = 0 trật tự bởi x desc) CTE)

Lưu ý: - nhưng cột được cập nhật không nên cột sắc

+0

nhưng không hiển thị kết quả lựa chọn. –

1

Hãy thử điều này

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

trả lại "(1 hàng bị ảnh hưởng)" nhưng không trả về hàng. –

+0

Hãy thử số này với cte as (chọn đầu (1) * từ [bảng] trong đó x = 0 order by 1 desc) cập nhật [table] set x = 1 from cte join [table] c on c.id = cte.id đầu vào được chèn. * ; – msi77

Các vấn đề liên quan