সংরক্ষিত পদ্ধতিতে নুন্যতম ক্ষেত্র তুলনা

আমি একটি সংরক্ষিত পদ্ধতির সঙ্গে একটি সমস্যা হচ্ছে। পরিবর্তনের জন্য এটি একটি বিদ্যমান রেকর্ডের সাথে একটি নতুন রেকর্ড তুলনা করছে। এই মত এই কাজ করা হয়:

SELECT 1 FROM Table
WHERE Id= @Id
AND Field1 = @Field1
AND Field2 = @Field2
AND Field3 = @Field3
AND Field4 = @Field4
AND Field5 = @Field5
AND LEDTS IS NULL

ক্ষেত্রগুলি নুল যখন এই ব্যর্থ মনে হয়। আমি জানি = NULL আপনি এটির প্রত্যাশা করতে পারে এমন ভাবে কাজ করে না, তবে আমি জানি না এটি এমন জিনিসগুলিতেও ব্যর্থ হয়। যখন আমি ক্ষেত্রের তুলনায় জিনিস তুলনা

(Field1 IS NULL AND Field2 IS NULL) OR Field1 = @Field2

এটা কাজ করে। এই কাজ করতে একটি ভাল উপায় আছে কি?

1
যদি আপনি কোড, xml বা ডেটা নমুনা পোস্ট করেন, তবে দয়া করে পাঠ্য সম্পাদকগুলিতে সেই লাইনগুলি হাইলাইট করুন এবং এডিটর সরঞ্জামদণ্ডে "কোড নমুনা" বোতামে ক্লিক করুন ( {} ) চমত্কারভাবে বিন্যাস এবং সিনট্যাক্স এটি হাইলাইট!
যোগ লেখক marc_s, উৎস
আমি খুব এই বিরক্তি আগ্রহী।
যোগ লেখক Valamas, উৎস

3 উত্তর

আপনি এই মত চেক ব্যবহার করতে পারেন:

ISNULL(Field1, '') = ISNULL(@Field1, '')

একটি drowback এই করছেন: আপনি মত সমানতা থাকতে পারে

NULL='' or ''=NULL

আমি আপনার দৃশ্যকল্প গ্রহণযোগ্য হতে পারে না জানি না।

2
যোগ
কর্মক্ষমতা একটি সমস্যা না হলে এটি জরিমানা, কিন্তু এটি sargable হয় না।
যোগ লেখক HLGEM, উৎস

SET ANSI_NULLS can control this behavior... Setting SET ANSI_NULLS OFF will make NULL = NULL evaluate to true.

কিন্তু আমি প্রকৃতপক্ষে সেট ANSI_NULLS OFF সেটিংসের বিরুদ্ধে সুপারিশ করব এবং পরিবর্তে ডাটাবেসগুলিতে "সীমাবদ্ধ" ক্ষেত্রগুলিতে সীমিত করার চেষ্টা করব।

2
যোগ
ধন্যবাদ। আমি দুর্ভাগ্যবশত nullable ক্ষেত্রগুলির সীমা সীমাবদ্ধ করতে পারছি না, তাই আমি ANSI_NULLS বিকল্পটি দিয়ে যাব। কিন্তু আমি বিজ্ঞতার সাথে এটি ব্যবহার করতে ভুলবেন না;)
যোগ লেখক Jasper, উৎস
@ জোসেফফানেলি ঠিক আছে, কিন্তু সঠিক চেক করার পরিবর্তে আপনি কী সুপারিশ করবেন?
যোগ লেখক Jasper, উৎস
এটি জটিল হলেও, আপনি যে তুলনাটি পোস্ট করেছেন তা হল নুল মানগুলির জন্য একটি ভাল উপায়।
যোগ লেখক Michael Fredrickson, উৎস
আমি এটির বিরুদ্ধেও সুপারিশ করব, বিশেষ করে SET ANSI_NULLS OFF একটি অব্যবহৃত বৈশিষ্ট্য
যোগ লেখক Joe Stefanelli, উৎস

এই আচরণটি ANSI_NULLS সেটিং দ্বারা পরিচালিত হয়। এটি ON এ ডিফল্ট এবং বিভিন্ন জিনিস সঠিকভাবে কাজ করার জন্য (যেমন সূচিবদ্ধ মতামত এবং বিতরিত প্রশ্নগুলি) এইভাবে সেট করা প্রয়োজন, তবে যদি আপনার এটি প্রয়োজন হয় না তবে আপনি এটি বন্ধ করতে পারেন।

অনলাইনে বই এ এটি সম্পর্কে আরও পড়ুন।

1
যোগ
যেহেতু আমি অন্য উত্তরের মন্তব্য করেছি, মনে রাখবেন সেট ANSI_NULLS OFF একটি অব্যবহৃত বৈশিষ্ট্য যা ভবিষ্যতে কিছু সময়ে দূরে নিয়ে যাওয়া হবে।
যোগ লেখক Joe Stefanelli, উৎস