ফাংশন / সঞ্চিত পদ্ধতি তৈরির জন্য স্কিমা পরীক্ষা করা অক্ষম করা


17

আমি সেই প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করছি যা এসকিউএল সার্ভার ২০০৮ আর 2 ডাটাবেসে পরিবর্তনগুলি কার্যকর করে। আমি যে প্রক্রিয়াটি রেখেছি তা আমার সঞ্চিত পদ্ধতি এবং ফাংশনগুলি পুনরায় তৈরি করে, পাশাপাশি সারণী / কলাম / ডেটা পরিবর্তন করতে স্ক্রিপ্টগুলি চালায়। দুর্ভাগ্যক্রমে, স্ক্রিপ্টগুলির একটিতে প্রথমে একটি ফাংশন স্থাপন করা দরকার। তবে আমি প্রথমে সমস্ত সঞ্চিত প্রোক / ফাংশন পরিবর্তনগুলি পরিচালনা করতে পারি না কারণ এটি প্রথম সারণী / কলাম / ডেটা পরিবর্তন স্ক্রিপ্টগুলি থেকে কলামগুলি যুক্ত করার উপর নির্ভর করে।

আমি ভাবছিলাম যে এসকিউএল সার্ভারটি ফাংশন / এসপি এর সংজ্ঞায় ব্যবহৃত কলামগুলি বৈধতা না দিয়ে স্টোরেজ পদ্ধতি এবং ফাংশনগুলি চালানো সম্ভব ছিল কিনা? আমি চেষ্টা করার চেষ্টা করেছি কিন্তু এটি সক্ষম করার জন্য কোনও শর্ত বা আদেশ খুঁজে পাইনি।


দেখে মনে হচ্ছে আপনার স্ক্রিপ্টগুলিতে আপনাকে কেবল অবজেক্ট তৈরির পুনর্বিন্যাসের প্রয়োজন হতে পারে।
থমাস স্ট্রিংগার

@ শার্ক এটি যে পরিবর্তনের স্ক্রিপ্টের সেখানে উপস্থিত কোনও ক্রিয়াকলাপের উপর নির্ভরশীলতা প্রয়োজন, যা সে সময় ছিল না ... এটি করার জন্য ম্যানুয়াল হস্তক্ষেপের প্রয়োজন হবে; আমি আরও কিছু স্বয়ংক্রিয় চেয়েছিলাম।
ব্রায়ান মেইনস

উত্তর:


20

আপনি সঞ্চিত পদ্ধতি সেই রেফারেন্স তৈরি করতে পারেন বস্তু যা এখন পর্যন্ত কোন অস্তিত্ব নেই (যেমন টেবিল এবং ফাংশন)। আপনি সঞ্চিত পদ্ধতি তৈরি করতে পারবেন না যে রেফারেন্স কলামগুলি ইতিমধ্যে বিদ্যমান বস্তুগুলিতে এখনও বিদ্যমান নেই। এটি পিছিয়ে যাওয়া নাম রেজোলিউশনের দ্বি-ধারযুক্ত তরোয়াল - এসকিউএল সার্ভার আপনাকে কিছু ক্ষেত্রে সন্দেহের সুবিধা দেয় তবে সমস্তটি নয়। SET STRICT_CHECKS ON;যে জায়গাগুলিতে এটি কাজ করে এবং যে জায়গাগুলি ভেঙে যায় সেগুলি সম্পর্কে কিছু ধারণা পাওয়ার জন্য এরল্যান্ডের ধারণাগুলি দেখুন :

http://www.sommarskog.se/strict_checks.html

(এবং তিনি কীভাবে আপনার পরে যা করছেন তার বিপরীতে পোলার পছন্দ করতে চান - আপনি অস্তিত্ব নির্বিশেষে যে কোনও কিছুই সংকলনের অনুমতি দিতে চান এবং তিনি প্রতিটি কলাম বা টেবিল চেক করে দেখতে চান))

SET DEFERRED_NAME_RESOLUTION OFF;যদিও এটির জন্য বলা হয়েছিল তেমন কোনও সেটিংস নেই :

http://connect.microsoft.com/sql/127152

এবং এর মতো কোনও সেটিং নেই IGNORE ALL_RESOLUTION;


আপনি কয়েকটি উপায়ে এটি পেতে পারেন সহ:

(ক) প্রভাবিত স্টোরেজ পদ্ধতিতে গুলি গতিশীল এসকিউএল ব্যবহার করুন।

(খ) এতে CREATE PROCEDUREকিছুই না থাকায় স্টাব তৈরি করুন , তারপরে আপনার স্ক্রিপ্টের বাকী অংশটি চালান, তারপরে ALTER PROCEDUREআসল শরীর রয়েছে এমন একটি চালান (সংক্ষেপে, পদ্ধতিটি দুটি পর্যায়ে মোতায়েন করুন)।

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

(d) মার্টিন স্মিথের এখানে একটি আকর্ষণীয় কাজ রয়েছে , তবে আমি এটির সাথে খেলিনি।


বাহ, মার্টিন স্মিথ হ্যাক উজ্জ্বলভাবে চালাক। আমি এখন এটি ব্যবহার করে নোংরা অনুভব করব তবে আমার 20 এর দশকের প্রথম দিকে।
জন জাব্রোস্কি

1

আপনি একটি সঞ্চিত প্রক্রিয়া তৈরি করতে পারেন যা প্রথমে প্রশ্নে থাকা অবজেক্টটিকে মুছে ফেলা বা নামকরণ করে এবং তারপরে আপনার মূল সঞ্চিত পদ্ধতিটি ডায়নামিক এসকিউএল হিসাবে চালায়। এইভাবে গতিশীল এসকিউএল ব্যবহার করতে আপনাকে প্রকৃত সঞ্চিত পদ্ধতিটি পুনরায় লিখতে হবে না।

নীচের কোডটি একটি সঞ্চিত প্রক্রিয়া চালিত করে যা কলামগুলিকে রেফারেন্স করে যা এখনও বিদ্যমান নেই (Expense_Super_Compare)

IF OBJECT_ID('Expense_Super_Compare_Results', 'U') IS NOT NULL
BEGIN
     EXEC('DROP TABLE Expense_Super_Compare_Results');
END

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