ইউপিএসআরটি - এমআরজিই বা অ্যাডভাইস সার্কাউন্টের আরও ভাল বিকল্প আছে কি? [বন্ধ]


14

আমি ভাবছিলাম আপনি যদি ইউপিএসআরটি এর ধারণার অনুরূপ কোনও টি-এসকিউএল কমান্ডের মুখোমুখি হয়ে থাকেন? অপারেশন (1) বা (2) ব্যবহার করে আপডেট করুন অপারেশন সম্পাদন করা অত্যধিক জটিল এবং ত্রুটির প্রবণ বলে মনে হচ্ছে।

OBJECTIVE

কাঙ্ক্ষিত রেকর্ডটি (এই ক্ষেত্রে কর্মচারী_আইডি 1) অপরিবর্তিত রয়েছে তা নিশ্চিত করার জন্য প্রয়োজনীয়ভাবে একই প্রশ্নটি দু'বার লিখতে হবে।

প্রেক্ষাপট

  • টেবিলের নাম: কর্মচারী
  • কর্মচারী আইডি: এর একটি প্রাথমিক কী রয়েছে এবং পরিচয় প্রমাণটি সত্য হিসাবে সেট করা আছে

পছন্দসমূহ

  1. একটি এসকিউএল আপডেট কার্যকর করুন ... পরীক্ষা করুন @@ সারসংক্ষেপ = 0 এবং @@ ত্রুটি = 0 ... প্রয়োজনে এসকিউএল INSERT কার্যকর করুন

    • কন: আপনাকে কার্যকরভাবে একই ক্যোরিয়াকে দুবার লিখতে হবে, একবার sertোকানো হিসাবে, একবার আপডেট হিসাবে
    • কন: আরও কোড = আরও টাইপ টাইপ করা
    • কন: আরও কোড = ত্রুটির জন্য আরও কক্ষ

/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "@@ সার্কাউন্ট ব্যবহার করে আপডেট করুন"

  1. একটি এসকিউএল মার্জ চালানো
    • কন: আপনাকে কার্যকরভাবে একই ক্যোরিয়াকে দুবার লিখতে হবে, একবার sertোকানো হিসাবে, একবার আপডেট হিসাবে
    • কন: আরও কোড = আরও টাইপ টাইপ করা
    • কন: আরও কোড = ত্রুটির জন্য আরও কক্ষ

http://technet.microsoft.com/en-us/library/bb510625.aspx "টি-এসকিউএল মার্জ"

  1. একটি এসকিউএল ইউপিএসআরটি কার্যকর করুন (বৈশিষ্ট্যটি বিদ্যমান নেই)
    • প্রো: আপনি ডেটা থেকে টেবিলের সম্পর্কটিকে একবার সংজ্ঞায়িত করেন (এসকিউএল সার্ভারটি এটি অন্তর্ভুক্ত বা আপডেট নয় কিনা তা নিয়ে উদ্বিগ্ন হতে দিন)
    • প্রো: কম কোড = দ্রুত বাস্তবায়ন
    • প্রো: কম কোড = কম সম্ভাবনা

উচ্চতর উদাহরণ

ইউপিএসআরটি কর্মী (কর্মচারী_আইডি, কর্মচারী সংখ্যা, চাকরি_শিরোনাম, প্রথম নাম, মাঝামাঝি নাম, উপাধি, সংশোধিত_এটি) ভ্যালু (1, '00 -124AB37 ',' পরিচালক ',' জন ',' টি ',' স্মিথ ', গেটডেট ());

  • যদি কর্মচারী_আইডি 1 বিদ্যমান না থাকে: এমএস এসকিউএল একটি INSERT বিবৃতি কার্যকর করে
  • যদি কর্মচারী_আইডি 1 বিদ্যমান থাকে: এমএস এসকিউএল কার্যকর করে এবং আপডেট আপডেট

4
এটি মাইক্রোসফ্টের জন্য কোনও বৈশিষ্ট্যের অনুরোধের মতো বলে মনে হচ্ছে, এখানে কেউই আপনাকে সমাধান করতে সহায়তা করতে পারে না। মাইক্রোসফ্ট যে সমাধানটি নিয়ে এসেছিল তা হ'ল মার্জ is যদি এটি আপনার জন্য নমনীয় / যথেষ্ট শক্তিশালী না হয় তবে আপনার একটি আলাদা সমাধান দরকার যা এখনও বিদ্যমান নেই।
অ্যারন বারট্র্যান্ড

3
আমার মতে, MERGEসোজা, নমনীয় এবং এটি এসকিউএল স্ট্যান্ডার্ডেরও একটি অংশ। MERGEএবং অন্যান্য UPSERTবাস্তবায়নের সাথে আসল সমস্যাটি হ'ল সম্ভাব্য লক এসকেলেশন বা এমনকি ডেডলকগুলি যার সিনট্যাক্সের সাথে কোনও সম্পর্ক নেই।
a1ex07

আপনার যদি প্রশ্ন থাকে তবে নির্দ্বিধায় এটি জিজ্ঞাসা করুন। যেমনটি লিখিত হয়েছে এটি মূলত MERGEএসকিউএল সার্ভারে বাস্তবায়ন সম্পর্কে একটি ডায়রিটিব ।
জেএনকে

ভাল প্রশ্ন - মূলত এমন কোনও ইউপিএসআরটি বিবৃতি রয়েছে যেখানে সার্ভারের জন্য এটি sertোকানো বা আপডেটের প্রয়োজন কিনা তা নিয়ে চিন্তিত। আমি সম্মত হলাম, "ইউপিএসআরটি" প্রয়োগের জন্য আপনি যৌক্তিকভাবে কী আশা করবেন তা মার্জ পূরণ করেন না। এমএস প্রদত্ত এই পদ্ধতিটি বাস্তবায়নের জন্য বেছে নিয়েছে, আমার প্রশ্নটি হ'ল: আপনি (এবং আমি) সিনট্যাক্সটি বাস্তবায়ন করার চেষ্টা করে যদি কোন সমস্যা হতে পারে বা বাস্তবায়ন করা অসম্ভব হতে পারে?
youcantryreachingme

উত্তর:


14

আমি মনে করি এর সহজ উত্তরটি হ'ল না। MERGEমাইক্রোসফ্ট আরও সংঘাতযুক্ত UPSERTযুক্তি উত্তর ছিল । আপনি এমনকি নিকৃষ্টতম পদ্ধতির তালিকাও দেননি:

IF (SELECT COUNT ... ) > 0
    UPDATE
ELSE
    INSERT

আমি কেবল আমার মুখে এটি টাইপ করেছিলাম, তবে এটি বেশিরভাগ ক্ষেত্রেই দেখা যায়।

যাই হোক MERGEনা কেন , যদি আপনার জন্য নমনীয় বা যথেষ্ট শক্তিশালী না হয় তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি মাইক্রোসফ্টকে http://connect.microsoft.com/sql/ এ একটি বৈশিষ্ট্য অনুরোধ জমা দিন এবং আপনার ব্যবসায়ের ক্ষেত্রে ব্যাখ্যা করুন, পুঙ্খানুপুঙ্খভাবে। যতক্ষণ না আপনি আপনার প্রস্তাবিত বাক্য গঠনটির প্রকৃত সুবিধাগুলি ধরে রেখেছেন MERGE, আপনি আমার ভোট পেয়েছেন। আপনি যদি "ত্রুটি-প্রবণ" অংশটি খুব বেশি ঝুলিয়ে রাখেন তবে আমি কেনার মতো সম্ভাবনা নেই Why কেন? কারণ আপনি কোনও বিবৃতি ফ্যাট-আঙুল করতে পারেন।

এটি বলেছিল, আমি মনে করি না যে এখানে কেউ বিশেষভাবে আপনার জন্য কিছু করতে পারে। আপনার এর সাথে সম্ভাব্য সমস্যাগুলি তদন্ত করা উচিত MERGE:

http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/


2
ধন্যবাদ হারুন আমি এমএসডিএন-তে টি-এসকিউএল ডকুমেন্টেশন দেখেছি এবং আমি যা খুঁজছিলাম তা খুঁজে পেলাম না; আমি ভেবেছিলাম যদি আমি কিছু মিস করি তবে আমি এটি সেখানে ফেলে দেব throw যদিও মার্জ স্টেটমেন্টটি কিছু পরিস্থিতিতে উপলব্ধি করে, আমি সাহায্য করতে পারি না তবে অনুভব করতে পারি যে এটি একটি সরল সংরক্ষণের অপারেশনের জন্য "পেরেকের পাউন্ডে পাথর মেরে ফেলতে হবে" একটি সমাধান। সম্ভবত আমার আমার প্রোগ্রামার টুপিটি নেওয়া উচিত, এবং আমার ডিবিএ ফেডোরা লাগানো উচিত। আপনার মতামত ভাগ করে নেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ।
প্রেসাকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.