সাব কোয়েরি টেবিলের সাথে সম্পর্কিত OUTPUT দিয়ে .োকান


22

আমি একটি ডাটাবেসের কাঠামো পরিবর্তন করছি। ফিনান্সিয়াল ইন্সটিটিউশনের টেবিলের বেশ কয়েকটি কলামের সামগ্রীটি টেবিল ব্যক্তিতে স্থানান্তর করতে হবে । ফিনান্সিয়াল ইন্সটিটিউশন একটি বিদেশী কী দিয়ে ব্যক্তির সাথে যুক্ত। প্রতিটি ফিনান্সিয়াল ইন্সটিটিউশনের সাথে সম্পর্কিত ব্যক্তির আইডি প্রয়োজন। সুতরাং, ব্যক্তিতে প্রবেশ করা প্রতিটি নতুন লাইনের জন্য, এই নতুন লাইনের আইডি (পরিচয়) ফিনান্সিয়াল ইন্সটিটিউশনের সংশ্লিষ্ট লাইনে অনুলিপি করতে হবে।

এটি করার সুস্পষ্ট উপায় হ'ল একটি পুনরাবৃত্ত টি-এসকিউএল কোড। তবে কেবল সেট-ভিত্তিক ক্রিয়াকলাপগুলির মাধ্যমে এটি করা সম্ভব কিনা তা জানতে আমি আগ্রহী।

আমি ভেবেছিলাম এমন অনুরোধের অভ্যন্তরীণ স্তরের কিছু হবে:

INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
OUTPUT inserted.Id, FinancialInstitution.Id
SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email
FROM FinancialInstitution;

দুর্ভাগ্যক্রমে, মনে হচ্ছে OUTPUT সেভাবে পারস্পরিক সম্পর্ক স্থাপন করতে পারে না ...


আপনি কি টেবিলের মধ্যে সারি সন্নিবেশ করতে চান Person? বা বিদ্যমানগুলি আপডেট করবেন? অথবা আপনি intoোকাতে চান Personএবং তারপরে UPDATE FinancialInstitution?
ypercubeᵀᴹ

আপনার ক্যোয়ারীটি কেবলমাত্র ব্যক্তির টেবিলটি আপডেট করছে। আপনি sertedোকানো.আইডি ক্যাপচার করতে পারেন, তবে ফিনান্সিয়াল ইন্সটিটিউশন.আইডি না করুন যদি না আপনি এটি সন্নিবেশ অংশে ব্যবহার না করেন। আপনার ক্যোয়ারীটি যেভাবে বসেছে, আপনি যদি OUTPUT ধারাটি সরিয়ে থাকেন তবে আপনি একটি ত্রুটি পাবেন কারণ আপনার INSERT বিবৃতিতে কলামগুলির সংখ্যা নির্বাচন নির্বাচন বিবরণের সাথে মেলে না।
ডাটাগোড

ypercube: আমি ব্যক্তিতে প্রবেশ করতে এবং তারপরে ব্যক্তিতে নতুন সারিটির আইডি দিয়ে ফিনান্সিয়াল ইনস্টিটিউশন আপডেট করতে চাই।
Yugo Amaryl

ডাটাগোড: আমি এটির আপডেটটি জানি, এই ক্যোয়ারীটি ভবিষ্যতের সমাধানের নেস্টেড স্তর। তবে আমি ইতিমধ্যে সেখানে আটকে আছি। ডান আমি নির্বাচনটি আইডি যোগ করতে পারছি না যদি আমি এটি প্রবেশ করান না।
Yugo Amaryl

1
@ যুগো অ্যামেরিল, আপনি এই উদাহরণটি গ্রহণ করার চেষ্টা করতে পারেন মাল্টি-রো সন্নিবেশগুলিতে সনাক্তকরণের মানগুলি ক্যাপচার করতে OUTPUT ক্লজটি ব্যবহার করে
ড্যানিসটি

উত্তর:


18

আমি আপনাকে (AB) ব্যবহার করতে পারে MERGEএই জন্য। প্রথমে একটি (অস্থায়ী) সারণী তৈরি করুন:

CREATE TABLE tempIDs
( PersonId INT, 
  FinancialInstitutionId INT
) ;

তারপর MERGEমধ্যে Person(পরিবর্তে INSERT), তাই আপনি জড়িত টেবিল কলাম ব্যবহার করতে পারেন OUTPUTদফা:

MERGE INTO Person 
USING FinancialInstitution AS fi
  ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT (Street1, Number1, City1, ...)
  VALUES (fi.Street, fi.Number, fi.City, ...)
OUTPUT inserted.Id, fi.Id
  INTO tempIDs ;

তারপরে টেম্প টেবিলটি ব্যবহার করুন UPDATE FinancialInstitution:

UPDATE fi
SET fi.PersonId = t.PersonId
FROM FinancialInstitution AS fi
  JOIN tempIDs AS t
    ON fi.Id = t.FinancialInstitutionId ; 

পরীক্ষায়: এসকিউএল-ফিডল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.