นำ OUTPUT ของคำสั่ง UPDATE ไปยังตัวแปรโลคัล


12

ฉันต้องการทำสิ่งนี้:

DECLARE @Id INT;

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

เป็นไปได้ไหม ฉันรู้ว่าฉันสามารถประกาศตัวแปรตารางท้องถิ่นและส่งออกตรงนั้น แต่ฉันอยากจะข้ามมันถ้าเป็นไปได้

คำตอบ:


15

ไม่เพราะคุณมีแนวโน้มOUTPUTที่จะเข้าแถวหลายแถวซึ่งไม่เหมาะกับตัวแปรสเกลาร์

คุณต้องเอาท์พุทเป็น@Tableตัวแปรหรือตารางที่ประกาศเพื่อจัดการกับเอาต์พุตหลายแถว


อ๋อ แม้ว่า e-mail address ที่ไม่ซ้ำกันมันเป็นไปไม่ได้ที่จะตัดโดยใช้ดราก้อน composable SELECTและมอบหมายเดียว ฉันได้รับข้อผิดพลาด"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."นี่เป็นเรื่องที่โชคร้ายเพราะมันเป็นโซลูชั่นที่สะอาดจริงๆเมื่อคุณรู้ว่าคุณส่งผลกระทบต่อแถวเดียว
Jon Seigel

ฉันเข้าใจ. อย่างไรก็ตามฉันสามารถพูดได้ว่า SELECT @JNK = SomeColumn จาก SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... เหตุใดข้อ จำกัด นี้จึงใช้ไม่ได้ที่นี่ อย่างไรก็ตามขอขอบคุณและฉันจะประกาศตัวแปรตารางท้องถิ่นและทำได้ด้วย ชีวิตดำเนินต่อไป :)
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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.