UPDATEステートメントのOUTPUTをローカル変数に送る


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複数行の出力を処理するには、変数または宣言されたテーブルに出力する必要があります。


うん。電子メールアドレスが一意であっても、構成可能なDMLと単一の割り当てを使用してハッキングすることはできません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."これは、1つの行にのみ影響していることがわかっている場合は、本当にクリーンなソリューションであるため、ちょっと残念です。
Jon Seigel、

わかります。しかし、SELECT @JNK = SomeColumn FROM SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ...と言うことができますが、なぜこの制約がここに適用されなかったのですか?とにかく感謝し、ローカルテーブル変数を宣言してそれで終了します。人生は続く。:)
AndreiRînea2012

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.