किसी स्थानीय चर के लिए अद्यतन कथन का निर्देश


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कई पंक्तियों को संभालने के लिए आपको एक चर या घोषित तालिका में आउटपुट करने की आवश्यकता होती है।


हां। भले ही ई-मेल पता अद्वितीय है, लेकिन कंपोजेबल डीएमएल और एकल असाइनमेंट का उपयोग करके इसे हैक करना संभव नहीं है 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."यह थोड़े दुर्भाग्यपूर्ण है क्योंकि यह वास्तव में एक साफ समाधान है जब आप जानते हैं कि आप केवल एक पंक्ति को प्रभावित कर रहे हैं।
जॉन सिगेल

मै समझता हुँ। हालाँकि मैं कह सकता हूं SELECT @JNK = SomeColumn FROM SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... तो यहाँ यह बाधा क्यों नहीं लागू की गई? वैसे भी धन्यवाद और मैं सिर्फ एक स्थानीय तालिका चर घोषित करूँगा और इसके साथ किया जा सकता है। जिंदगी चलती रहती है। :)
आंद्रेई Reanea

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.