Hướng OUTPUT của câu lệnh CẬP NHẬT đến một biến cục bộ


12

Tôi muốn làm điều này:

DECLARE @Id INT;

UPDATE Logins
SET    SomeField = 'some value'
OUTPUT @Id = Id
WHERE  EmailAddress = @EmailAddress -- this is a parameter of the sproc

Điều này thậm chí có thể? Tôi biết tôi có thể khai báo một biến bảng cục bộ và chỉ đạo đầu ra ở đó nhưng tôi muốn bỏ qua nó nếu có thể

Câu trả lời:


15

Không, bởi vì bạn có khả năng OUTPUTting nhiều hàng, không phù hợp với biến vô hướng.

Bạn cần xuất ra một @Tablebiến hoặc bảng khai báo để xử lý nhiều hàng đầu ra.


Vâng. Ngay cả khi địa chỉ email là duy nhất, không thể hack nó bằng DML có thể tổng hợp và một nhiệm vụ duy nhất SELECT. Tôi gặp lỗi "A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement."Điều này thật đáng tiếc vì đó là một giải pháp thực sự sạch khi bạn biết rằng bạn chỉ ảnh hưởng đến một hàng duy nhất.
Jon Seigel

Tôi hiểu. Tuy nhiên tôi có thể nói CHỌN @JNK = someColumn TỪ someTable WHERE someOtherColumn = MatchesMult MônRows ... Vậy tại sao hạn chế này không được áp dụng ở đây? Dù sao cũng cảm ơn và tôi sẽ chỉ khai báo một biến bảng cục bộ và được thực hiện với nó. Cuộc sống vẫn tiếp diễn. :)
Andrei Rînea

0
declare @status_atividade bit;

update t1 set         
    t1.idioma = t2.idioma, 
    t1.regiao = t2.regiao, 
    t1.fuso_horario = t2.fuso_horario,
    @status_atividade = t2.status_atividade

from 
    @usuario as t1  
join 
    dbo.locatario as  t2 
on 
    t1.id_locatario = t2.id_locatario

select @status_atividade
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.