আমাকে অনেকগুলি foo.sql
ক্যোয়ারী রিফ্যাক্টর এবং ডকুমেন্ট করতে হবে যা ডিবি টেক সাপোর্টের একটি দল (গ্রাহক কনফিগারেশন এবং এর মতো জিনিসগুলির জন্য) ভাগ করবে। বিভিন্ন ধরণের টিকিট রয়েছে যা নিয়মিত আসে যেখানে প্রতিটি গ্রাহকের নিজস্ব সার্ভার এবং ডাটাবেস থাকে তবে অন্যথায় স্কিমাটি বোর্ড জুড়ে একই are
সঞ্চিত পদ্ধতিগুলি বর্তমানে কোনও বিকল্প নয়। আমি গতিশীল বা এসকিউএলসিএমডি ব্যবহার করব কিনা তা নিয়ে বিতর্ক করছি, এসকিউএল সার্ভারে আমি কিছুটা নতুন হওয়ায় আমি তেমন কিছু ব্যবহার করিনি।
এসকিউএলসিএমডি স্ক্রিপ্টিং আমি স্পষ্টভাবে আমার কাছে "দেখতে" ক্লিনার বলে মনে করি এবং প্রয়োজন অনুসারে প্রশ্নের মধ্যে ছোটখাটো পরিবর্তন করা সহজ, তবে ব্যবহারকারীকে এসকিউএলসিএমডি মোড সক্ষম করতে বাধ্য করে। ডাইনামিক আরও বেশি কঠিন কারণ স্ট্রিং ম্যানিপুলেশন ব্যবহার করে কোয়েরি লেখা হওয়ার কারণে সিনট্যাক্স হাইলাইটিং হ্রাস হ্রাস পেয়েছে।
এগুলি পরিচালনা করা হচ্ছে এবং পরিচালনা স্টুডিও 2012, এসকিউএল সংস্করণ 2008R2 ব্যবহার করে চালানো হচ্ছে। কোনও পদ্ধতির কিছু উপকার / বিভক্তি বা এসকিউএল সার্ভারের কোনও কোনও পদ্ধতি বা অন্য পদ্ধতিতে "সেরা অনুশীলন" কী কী? তাদের মধ্যে একটির কি অন্যের চেয়ে "নিরাপদ"?
গতিশীল উদাহরণ:
declare @ServerName varchar(50) = 'REDACTED';
declare @DatabaseName varchar(50) = 'REDACTED';
declare @OrderIdsSeparatedByCommas varchar(max) = '597336, 595764, 594594';
declare @sql_OrderCheckQuery varchar(max) = ('
use {@DatabaseName};
select
-- stuff
from
{@ServerName}.{@DatabaseName}.[dbo].[client_orders]
as "Order"
inner join {@ServerName}.{@DatabaseName}.[dbo].[vendor_client_orders]
as "VendOrder" on "Order".o_id = "VendOrder".vco_oid
where "VendOrder".vco_oid in ({@OrderIdsSeparatedByCommas});
');
set @sql_OrderCheckQuery = replace( @sql_OrderCheckQuery, '{@ServerName}', quotename(@ServerName) );
set @sql_OrderCheckQuery = replace( @sql_OrderCheckQuery, '{@DatabaseName}', quotename(@DatabaseName) );
set @sql_OrderCheckQuery = replace( @sql_OrderCheckQuery, '{@OrderIdsSeparatedByCommas}', @OrderIdsSeparatedByCommas );
print (@sql_OrderCheckQuery); -- For debugging purposes.
execute (@sql_OrderCheckQuery);
এসকিউএলসিএমডি উদাহরণ:
:setvar ServerName "[REDACTED]";
:setvar DatabaseName "[REDACTED]";
:setvar OrderIdsSeparatedByCommas "597336, 595764, 594594"
use $(DatabaseName)
select
--stuff
from
$(ServerName).$(DatabaseName).[dbo].[client_orders]
as "Order"
inner join $(ServerName).$(DatabaseName).[dbo].[vendor_client_orders]
as "VendOrder" on "Order".o_id = "VendOrder".vco_oid
where "VendOrder".vco_oid in ($(OrderIdsSeparatedByCommas));
use
বিবৃতি সম্ভবত বাদ যেতে পারে যেমন সুযোগ এই বিশেষ স্ক্রিপ্ট সময় কোন পথে পরিবর্তন করা যাবে না। আমার কাছে ব্যবহারের একটি ছোট সংখ্যা রয়েছে যেখানে ক্রস-সার্ভার অনুসন্ধান থাকবে তবে এটি এই পোস্টের আওতার বাইরে হতে পারে।
use ...
আপনার লিপির উদ্দেশ্য কী ? পরবর্তী ক্যোয়ারের সঠিক সম্পাদন করা কি গুরুত্বপূর্ণ? আমি জিজ্ঞাসা করছি কারণ যদি বর্তমান ডাটাবেস পরিবর্তন করা আপনার কোয়েরির প্রত্যাশিত ফলাফলগুলির মধ্যে একটি হয় তবে ডায়নামিক এসকিউএল সংস্করণ কেবল এসইকিউএলসিএমডি প্রকরণের বিপরীতে বাহ্যিক স্কোপে নয়, ডায়নামিক ক্যোয়ারির স্কোপগুলিতে এটি পরিবর্তন করবে of অবশ্যই, শুধুমাত্র একটি সুযোগ আছে)।