মাল্টি-স্টেটমেন্ট লেনদেনের মধ্যে ডেটাবাসের বিবৃতি অনুমোদিত নয়


13

আমি এখান থেকে অ্যাডভেঞ্চার ওয়ার্কস ভিত্তিক ইন-মেমরি নমুনা ডাউনলোড করেছি এবং তার সাথে থাকা ডকটিতে বর্ণিত সমস্ত পদক্ষেপ অনুসরণ করেছি। তবে, আমি যখন এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে স্ক্রিপ্টটি চালানোর চেষ্টা করি তখন আমি ত্রুটি বার্তাটি পাই:

মাল্টি-স্টেটমেন্ট লেনদেনের মধ্যে ডেটাবাসের বিবৃতি অনুমোদিত নয়

ত্রুটিটি লাইন 9 এ নির্দেশ করে, যা হ'ল:

IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
    ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] 
    CONTAINS MEMORY_OPTIMIZED_DATA
GO

যেহেতু এটি (কমবেশি) অফিসিয়াল মাইক্রোসফ্ট ডকুমেন্টেশন, তাই আমি ধরে নিচ্ছি যে এটির জন্য আমি কিছু ভুল করছি, তবে এটি কী তা বুঝতে পারি না।

উত্তর:


13

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

আজকে আরও ঘনিষ্ঠভাবে স্ক্রিপ্টটির দিকে তাকালে, কোনও লেনদেন হ্যান্ডলিং স্পষ্টভাবে সংজ্ঞায়িত করা হয়নি, তবে সম্ভবত আপনি স্ক্রিপ্টটিকে একটি ক্যোয়ারী উইন্ডোতে আটকে দিয়েছেন যা ইতিমধ্যে একটি সক্রিয় লেনদেন ছিল, অথবা একটি নতুন ক্যোয়ারী উইন্ডো তৈরি করেছে যা স্বয়ংক্রিয়ভাবে BEGIN TRANSACTION; / COMMIT TRANSACTION;বিবৃতি যুক্ত করে।

আমি এই ব্লগ পোস্টে অন্যান্য কয়েকটি সম্ভাব্য গোটাচাও দেখিয়েছি ।


1
"সম্ভবত আপনি ইতিমধ্যে একটি সক্রিয় লেনদেন থাকা একটি কোয়েরি উইন্ডোতে স্ক্রিপ্টটি আটকালেন" এটাই সমস্যা বলে মনে হচ্ছে কারণ আমি যখন একটি নতুন উইন্ডোতে পুরো ক্যোয়ারী চালিয়েছিলাম তখন এটি কাজ করেছিল।
পিটার ব্রডিন

9

আমি @ অ্যারোনবার্ট্র্যান্ডের সাথে একমত হয়েছি আপনি কোনও ভুল করছেন না। মাইক্রোসফ্টের স্ক্রিপ্টটিতে এটি বাগ সহ আমি প্রথম দেখি নি। বাস্তবিকভাবে তারা যতগুলি স্ক্রিপ্ট প্রকাশ করে তা নিয়ে আমি না দেখে অবাক হব।

বিশেষত সমস্যাটি হ'ল এটি ALTER DATABASEকোনও লেনদেনে মোটেই অনুমোদিত নয়। আপনি এখানে বিওএল রেফারেন্স দেখতে পাচ্ছেন: লেনদেনগুলিতে অনুমোদিত ট্রানজ্যাক্ট-এসকিউএল বিবৃতি

বাস্তবে এমনকি সাধারণ স্ক্রিপ্টও একই ত্রুটির সাথে ব্যর্থ হয়।

BEGIN TRANSACTION
ALTER DATABASE AdventureWorks2012 SET READ_WRITE
COMMIT

হারুন যেমন বলেছিলেন, লেনদেনের হ্যান্ডলিংটি সরিয়ে ফেলুন (বা ALTER DATABASEলেনদেন থেকে অন্তত বিবৃতি) এবং আপনার ভাল হওয়া উচিত।


-2

লেনদেন পৃথক করতে "যান" ব্যবহার করুন। যে বিষয়টি সমাধান করবে। (একে একে চালানো সহজ than) এছাড়াও বিচ্ছিন্নতা স্তর পরিবর্তন করতে পারে (পরীক্ষিত নয়)

SET TRANSACTION ISOLATION LEVEL SERIALISABLE

Begin tran

---Statements goes here

commit tran

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

যখন অন্যরা ইতিমধ্যে সনাক্ত করেছে যা ALTER DATABASEকোনও লেনদেনের মধ্যে সম্পাদন করা যায় না তখন আপনি পোস্ট করার আগে আপনার কোডটি পরীক্ষা করতে চাইতে পারেন। বিচ্ছিন্নতা স্তরটি সেট SERIALIZABLEকরা এর কোনও প্রভাব নেই।
ম্যাক্স ভার্নন

"যান" কোনও এসকিউএল বিবৃতি নয়। এটি এসএসএমএসকে একটি ব্যাচ হিসাবে এসকিউএল সার্ভারে পূর্ববর্তী বিবৃতি (গুলি) জমা দেওয়ার জন্য নির্দেশ। আপনি যদি সাহসী বোধ করেন তবে আপনি এটি পরিবর্তন করতে পারেন: সরঞ্জাম -> বিকল্প -> ক্যোয়ারি এক্সিকিউশন -> এসকিউএল সার্ভার। একক লেনদেনের মধ্যে অনেকগুলি ব্যাচ জমা দেওয়া যায়।
মাইকেল গ্রিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.