এই সিনট্যাক্সটি কীভাবে কাজ করে? {fn কারডেট ()} বা {fn এখন ()} ইত্যাদি


19

সম্প্রতি আমি বেশ কয়েকটি পুরাতন সঞ্চিত প্রক্রিয়া সন্ধান করছি যা এসকিউএল সার্ভার 2005 এর জন্য লেখা ছিল এবং আমি এমন কিছু লক্ষ্য করেছি যা আমি বুঝতে পারি না। এটি কোনও ধরণের ফাংশন কল হিসাবে উপস্থিত রয়েছে।

একটি নমুনা:

SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;

এই সব সারি থেকে প্রদর্শন করা হবে sys.objectsআছে একটি create_dateপূর্বে থেকে 24 ঘন্টা আগে।

যদি আমি এই প্রশ্নের জন্য এক্সিকিউশন প্ল্যানটি প্রদর্শন করি তবে আমি দেখতে পাচ্ছি যে এটি ডেটাবেস ইঞ্জিন দ্বারা {fn Now()}প্রতিস্থাপন করা getdate()হয়েছে:

SELECT [o].[name],[o].[type_desc],[o].[create_date] 
FROM [sys].[objects] [o] 
WHERE [o].[create_date]<(getdate()-@1)

স্পষ্টতই, ব্যবহার করা {fn Now()}তার চেয়ে অনেক বেশি অবচেতন GetDate()। আমি কারও পক্ষে এই সিনট্যাক্সটিকে প্লেগের মতো এড়িয়ে যাব কারণ এটি অনিবন্ধিত।

উত্তর:


25

এটি ওডিবিসি রক্ষা সিনট্যাক্স, এবং ইঞ্জিনটি তার নিজস্ব বাস্তবায়ন কী তা জানে এবং বাস্তবায়ন পরিকল্পনায় আপনি যেমনটি দেখেছেন তেমন পরিবর্তন করে দেয়। এছাড়াও অন্যান্য জিনিস রয়েছে যেমন:

SELECT {fn curdate()},
       {ts '2016-05-24 15:19:36'}, -- not vulnerable to SET LANGUAGE!
       {guid 'D08891B4-BC25-4C7C-BAEF-3B756055AC6E'};

এখানে , এখানে , এখানে এবং সবচেয়ে গুরুত্বপূর্ণভাবে এখানে ডকুমেন্টেশন দেখুন । তবে দয়া করে অনুসন্ধান এবং এই বাক্য গঠন সম্পর্কে শিখবেন না; আইএমএইচও আপনার বেশিরভাগ অংশের জন্য নেটিভ সিনট্যাক্স ব্যবহার করা উচিত এবং ভান করা উচিত যে আপনি এই জিনিসগুলি কখনও শুনে নি।

আমি getdate()-1শর্টহ্যান্ডের বিরুদ্ধেও দৃ strongly়ভাবে সুপারিশ করছি, বিশেষত যদি আপনি ফিরে যান এবং পুরাতন কোডটি আপডেট করে থাকেন। স্পষ্টত এবং ব্যবহার করুন DATEADD, যেহেতু অন্তর্নিহিত শর্টহ্যান্ড নতুন ধরণের সাথে কাজ করে না। উদাহরণস্বরূপ, চেষ্টা করুন:

DECLARE @d DATE = GETDATE();
SELECT @d - 1;

ফলাফল:

এমএসজি 206, স্তর 16, রাজ্য 2, লাইন 2
অপেরাড ধরণের সংঘর্ষ: তারিখ ইনট্রির সাথে বেমানান

আপনি সেখানে থাকাকালীন, আপনি যদি ভবিষ্যতে নিজের কোডটি 10 ​​বছর সত্যিই রক্ষা করতে চান তবে তাও সেমি-কলোন যুক্ত করতে পারে।


এই এস্কেপ সিনট্যাক্সটি জেডিবিসিও সমর্থন করে।
a_horse_with_no_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.