2012-02-03 34 views
5

Tôi có một quy trình được chọn và tôi đang cố gắng thực hiện nó để kết quả mà nó mang xuống cũng cập nhật một cột có tên là Downloaded và đánh dấu các hàng đó là tải xuống.Chọn và cập nhật trong một thủ tục đã lưu

Ví dụ: tôi kéo xuống 10 hàng 10 hàng này, tôi cũng muốn cập nhật cột Downloaded thành đúng tất cả trong cùng một thủ tục được lưu trữ. Điều này có thể không?

Đây là sp của tôi cho đến nay, nó kéo xuống dữ liệu.

ALTER PROCEDURE [dbo].[GetLeads] 
@DateTo datetime = null, 
@DateFrom datetime = null 
AS 
    SELECT name 
     , lastname 
     , title 
     , company 
     , address 
     , address2 
     , city 
     , [state] 
     , zip 
     , country 
     , stamptime 

    FROM 
     lead 
    where 
     ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom)) 

Cảm ơn!

+1

Có lẽ tôi đã không nhận được câu hỏi, nhưng 'CẬP NHẬT dẫn SET Downloaded = TRUE WHERE ((@DateTo là null VÀ @DateFrom LÀ null) hoặc (stamptime GIỮA @DateTo VÀ @DateFrom)) '?? – vulkanino

Trả lời

4

Tiếp tục về câu trả lời bình luận vulkanino của, một cái gì đó như thế này:

ALTER PROCEDURE [dbo].[GetLeads] 
@DateTo datetime = null, 
@DateFrom datetime = null 
AS 
    UPDATE 
     lead 
    SET  
     Downloaded = 1 
    WHERE 
     ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom)) 

    SELECT name 
     , lastname 
     , title 
     , company 
     , address 
     , address2 
     , city 
     , [state] 
     , zip 
     , country 
     , stamptime 

    FROM 
     lead 
    where 
     ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom)) 
11

Bạn có thể chỉ đơn giản là OUTPUT các hàng được cập nhật;

UPDATE lead 
    SET Downloaded = 1 
OUTPUT INSERTED.* 
    WHERE ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom)) 

Bản cập nhật này, sau đó trả về các hàng được cập nhật trong một câu lệnh.

+1

+1 đơn giản là rực rỡ! –

+0

Tôi đã sử dụng giải pháp này với DELETED. * (Thay vì INSERTED. *) Để trả về giá trị trường _orginal_ tức là các giá trị trước khi áp dụng CẬP NHẬT. –

2

Đặt cược tốt nhất của bạn có thể là sử dụng câu lệnh OUTPUT với UPDATE.

http://blog.sqlauthority.com/2007/10/01/sql-server-2005-output-clause-example-and-explanation-with-insert-update-delete/

DECLARE @TEMPTABLE 
(
    name <type> 
    , lastname <type> 
    , title <type> 
    , company <type> 
    , address <type> 
    , address2 <type> 
    , city <type> 
    , state <type> 
    , zip <type> 
    , country <type> 
    , stamptime <type> 
) 

UPDATE a 
SET a.Downloaded = 1 
OUTPUT Inserted.name, Inserted.lastname, Inserted.title, etc. INTO @TEMPTABLE 
FROM lead a 
WHERE ((@DateTo IS NULL AND @DateFrom IS NULL) OR (a.stamptime BETWEEN @DateTo AND @DateFrom)) 

SELECT * FROM @TEMPTABLE 
Các vấn đề liên quan