উত্তর:
যেমনটি বলা হয়েছে, কোনও উপায় নেই।
তবে, আমরা যা করি তা হ'ল এসকিউএলসিএমডি মোড চালু আছে কিনা তা নির্ধারণ করার জন্য আমাদের স্ক্রিপ্ট শিরোনামটিতে একটি দ্রুত চেক অন্তর্ভুক্ত করা (এবং স্ক্রিপ্টটি সমাপ্ত না করে):
:setvar DatabaseName "MyDatabase"
GO
IF ('$(DatabaseName)' = '$' + '(DatabaseName)')
RAISERROR ('This script must be run in SQLCMD mode. Disconnecting.', 20, 1) WITH LOG
GO
-- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors
IF @@ERROR != 0
SET NOEXEC ON
GO
PRINT 'You will not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
তীব্রতা 20 ব্যবহৃত হওয়ার কারণ রয়েছে, এটি তত্ক্ষণাত্ সংযোগটি মেরে ফেলবে, স্ক্রিপ্ট কোডটি আর চালানো থেকে রোধ করবে, এমনকি GO
স্ক্রিপ্টে পরে ব্যাচ টার্মিনেটর থাকলেও।
সিস্টেমের সমস্যাগুলি ইঙ্গিত করুন এবং মারাত্মক ত্রুটি, যার অর্থ একটি বিবৃতি বা ব্যাচ চালাচ্ছে এমন ডেটাবেস ইঞ্জিন টাস্ক আর চলছে না। টাস্কটি কী ঘটেছিল এবং তারপরে সমাপ্ত হয় সে সম্পর্কে তথ্য রেকর্ড করে। বেশিরভাগ ক্ষেত্রে, ডেটাবেস ইঞ্জিনের উদাহরণের সাথে অ্যাপ্লিকেশন সংযোগটিও শেষ হতে পারে । সমস্যাটির উপর নির্ভর করে যদি এটি ঘটে থাকে তবে অ্যাপ্লিকেশনটি আবার সংযোগ করতে সক্ষম হবে না।
এই ব্যাপ্তির ত্রুটি বার্তাগুলি একই ডাটাবেসে ডেটা অ্যাক্সেসের সমস্ত প্রক্রিয়াগুলিকে প্রভাবিত করতে পারে এবং ইঙ্গিত করে যে কোনও ডাটাবেস বা বস্তু ক্ষতিগ্রস্থ হয়েছে। 19 থেকে 24 এর মধ্যে তীব্রতার স্তরের ত্রুটি বার্তাগুলি ত্রুটি লগতে লেখা হয়।
SET NOEXEC ON
স্ক্রিপ্টের অন্য কোনও কিছু চলমান থেকে রোধ করতে একটি অতিরিক্ত সুরক্ষা ব্যবস্থা হিসাবে সেট করতে পারেন ।
না।
তবে আপনি সর্বদা এসকিউএলসিএমডি মোডে চালাতে পারেন এবং এতে টি-এসকিউএল রাখতে পারেন
এসকিউএলসিএমডি কমান্ড এবং লেনদেন-এসকিউএল-এর মধ্যে একটি স্পষ্ট পার্থক্য তৈরি করতে, সমস্ত এসকিউএলসিএমডি কমান্ডগুলি, একটি কোলন (:) এর সাথে উপসর্গ করা প্রয়োজন।