আমাদের অ্যাপ্লিকেশনটির একটি ওরাকল ডাটাবেস বা একটি মাইক্রোসফ্ট এসকিউএল সার্ভার ডাটাবেসের সাথে সমানভাবে ভাল কাজ করা দরকার। এটির সুবিধার্থে, আমরা আমাদের ক্যোয়ারী সিনট্যাক্সকে একত্রিত করার জন্য একটি মুষ্টিমেয় ইউডিএফ তৈরি করেছি। উদাহরণস্বরূপ, এসকিউএল সার্ভারের GETDATE () রয়েছে এবং ওরাকল এর SYSDATE রয়েছে। তারা একই ফাংশন সম্পাদন করে তবে তারা বিভিন্ন শব্দ। আমরা উভয় প্ল্যাটফর্মের জন্য NOW () নামে একটি মোড়ক লিখেছিলাম যা একটি সাধারণ ফাংশনের নামে প্রাসঙ্গিক প্ল্যাটফর্মের নির্দিষ্ট সিনট্যাক্সকে মোড়ায় ps আমাদের অন্যান্য অন্যান্য ক্রিয়াকলাপ রয়েছে, যার মধ্যে কয়েকটি মূলত হোমোজনাইজেশনের জন্য কেবলমাত্র অস্তিত্বহীন। দুর্ভাগ্যক্রমে, এসকিউএল সার্ভারের জন্য এটির একটি ব্যয় রয়েছে। ইনলাইন স্কেলার ইউডিএফগুলি পারফরম্যান্সের জন্য সর্বনাশ করে এবং সমান্তরালতা সম্পূর্ণ অক্ষম করে। বিকল্প হিসাবে, আমরা একই লক্ষ্য অর্জনে সিএলআর অ্যাসেম্বলি ফাংশন লিখেছি। আমরা যখন এটি কোনও ক্লায়েন্টের কাছে নিযুক্ত করি তখন তারা ঘন ঘন অচলাবস্থা অনুভব করতে শুরু করে। এই নির্দিষ্ট ক্লায়েন্টটি প্রতিলিপি এবং উচ্চ প্রাপ্যতা কৌশলগুলি ব্যবহার করছে এবং আমি ভাবছি যে এখানে কোনও রকম মিথস্ক্রিয়া চলছে। আমি কেবল বুঝতে পারি না যে কীভাবে একটি সিএলআর ফাংশন প্রবর্তন করলে এই জাতীয় সমস্যার সৃষ্টি হবে। রেফারেন্সের জন্য, আমি আসল স্কেলার ইউডিএফ সংজ্ঞা পাশাপাশি প্রতিস্থাপন সিএলআর সংজ্ঞা সি # এবং এর জন্য এসকিউএল ঘোষণার অন্তর্ভুক্ত করেছি। আমার কাছে ডেডলক এক্সএমএলও রয়েছে যা আমি যদি সরবরাহ করতে পারি তবে তা যদি সহায়তা করে।
আসল ইউডিএফ
CREATE FUNCTION [fn].[APAD]
(
@Value VARCHAR(4000)
, @tablename VARCHAR(4000) = NULL
, @columnname VARCHAR(4000) = NULL
)
RETURNS VARCHAR(4000)
WITH SCHEMABINDING
AS
BEGIN
RETURN LTRIM(RTRIM(@Value))
END
GO
সিএলআর বিধানসভা ফাংশন
[SqlFunction(IsDeterministic = true)]
public static string APAD(string value, string tableName, string columnName)
{
return value?.Trim();
}
সিএলআর ফাংশনের জন্য এসকিউএল সার্ভারের ঘোষণা
CREATE FUNCTION [fn].[APAD]
(
@Value NVARCHAR(4000),
@TableName NVARCHAR(4000),
@ColumnName NVARCHAR(4000)
) RETURNS NVARCHAR(4000)
AS
EXTERNAL NAME ASI.fn.APAD
GO