স্থানীয় আপডেটের ক্ষেত্রে কোনও আপডেটের স্টেটমেন্টের 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একাধিক সারি হ্যান্ডেল করতে আপনাকে পরিবর্তনশীল বা ঘোষিত টেবিলের আউটপুট নিতে হবে।


হাঁ। এমনকি যদি ই-মেইল ঠিকানাটি অনন্য হয়, তবে এটি কম্পোজেবল ডিএমএল এবং একটি একক অ্যাসাইনমেন্ট ব্যবহার করে এটি হ্যাক করা সম্ভব নয় 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."এটি দুর্ভাগ্যজনক কারণ এটি সত্যই পরিষ্কার সমাধান যখন আপনি জানেন যে আপনি কেবল একটি একক সারিকে প্রভাবিত করছেন।
জন সেগেল

আমি বুঝেছি. তবে আমি বলতে পারি @JNK = কোথাও কোথাও কোথাও কোথাও কোথাও থেকে কিছু কলম = ম্যাচস মাল্টিপলরোজ ... এখানে কেন এই বাধা প্রয়োগ করা হয়নি? যাইহোক ধন্যবাদ এবং আমি কেবল একটি স্থানীয় টেবিল ভেরিয়েবল ঘোষণা করব এবং এটি দিয়ে সম্পন্ন করব। জীবন চলে। :)
আন্দ্রে রিনিয়া

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.