ডিফল্ট প্যারামিটার মান হিসাবে এসকিউএল ফাংশন?


105

আমি এটির সাথে একটি ডিফল্ট প্যারামিটার মান পরিবর্তন করার চেষ্টা করেছি:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

এবং সমস্ত এসকিউএল প্রাক-সংকলক আমাকে দিয়েছে এই ত্রুটি:

এমএসজি 102, স্তর 15, রাজ্য 1, প্রক্রিয়া আমার_এসপি, লাইন 8 '(' এর নিকটে ভুল সিনট্যাক্স।

আমি ইতিমধ্যে পদ্ধতি তৈরি করেছি। (আমি এটি প্রাসঙ্গিক কিনা তা নিশ্চিত নই।) আমি নাল ডিফল্ট মানটি ব্যবহার করছিলাম এবং পরে এটির জন্য যাচাই করছিলাম, তবে এটি যথাযথ বলে মনে হচ্ছে না। আমি কি এক লাইনে এটি করতে পারি?


আপডেট: আমি সঞ্চিত প্রক্রিয়া পরামিতিগুলির MSDN এর বিবরণটি ছাড়ছিলাম :

[= ডিফল্ট] প্যারামিটারের জন্য একটি ডিফল্ট মান। যদি কোনও ডিফল্ট মান সংজ্ঞায়িত করা হয় তবে সেই প্যারামিটারের জন্য মান নির্দিষ্ট না করেই ফাংশনটি কার্যকর করা যেতে পারে।

দ্রষ্টব্য:
পূর্বনির্ধারিত প্যারামিটার মানগুলি বর্ণের (সর্বাধিক) এবং বর্ণের (সর্বোচ্চ) ডেটা ধরণের ব্যতীত সিএলআর ফাংশনগুলির জন্য নির্দিষ্ট করা যেতে পারে।

যখন ফাংশনটির কোনও প্যারামিটারের একটি ডিফল্ট মান থাকে, তখন ডিফল্ট মানটি পুনরুদ্ধার করতে ফাংশনটি ডাকা হলে অবশ্যই ডিফল্ট কীওয়ার্ডটি নির্দিষ্ট করতে হবে। এই আচরণটি স্টোরেজ পদ্ধতিতে ডিফল্ট মানগুলির সাথে পরামিতি ব্যবহার করা থেকে পৃথক হয় যেখানে পরামিতি বাদ দেওয়াও ডিফল্ট মান বোঝায়।

আমি কি এই ভুল পড়ছি?

অনেক ধন্যবাদ.

উত্তর:


160

সঞ্চিত প্রক্রিয়া প্যারামিটারের জন্য ডিফল্ট মানটি ধ্রুবক হতে হবে । আপনাকে নিম্নলিখিতগুলি করতে হবে ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
বা এসট করুন @ কর্নেট ডেট = কোলেসসিই (@ বর্তমান তারিখ, GETDATE ())
এসকিউএলমেনেস

আমি আগে ব্যবহার ছিল। "আমি একটি নাল ডিফল্ট মান ব্যবহার করছিলাম এবং পরে এটি পরীক্ষা করছিলাম তবে এটি যথাযথ বলে মনে হচ্ছে না।" তবুও আপনাকে ধন্যবাদ ব্রায়ান।
ব্যবহারকারী58044

এই সমাধান নিখুঁত।
আর.কাতনান

35

আমি মনে করি না এটি সম্ভব, আপনাকে ডিফল্ট হিসাবে আক্ষরিক (ধ্রুবক) মানটি ব্যবহার করতে হবে।

তবে আপনি এটি করতে পারেন:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

আপনি নিম্নলিখিত হিসাবে চেষ্টা করতে পারেন:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

আপনি উদাহরণস্বরূপ স্কয়ার বন্ধনী থেকে আপনি মাইক্রোসফ্ট এসকিউএল সার্ভার ব্যবহার করছেন I

এমএসডিএন থেকে :

কেবলমাত্র একটি ধ্রুবক মান, যেমন একটি চরিত্রের স্ট্রিং; একটি স্কেলার ফাংশন (হয় কোনও সিস্টেম, ব্যবহারকারী-সংজ্ঞায়িত, বা সিএলআর ফাংশন); বা NULL একটি ডিফল্ট হিসাবে ব্যবহার করা যেতে পারে।

ফাংশন GETDATE()সময়ে সময়ে পৃথক মান প্রদান করে, তাই এটি একটি ধ্রুবক প্রকাশ নয়।


2

এই মানটি ডিটারমিনিস্টিক নয় এবং ব্যবহার করা যায় না


0

প্রস্তাবনা:

এতে ডিফল্ট সেট করুন NULL

GETDATE()সামনের প্রান্তে ডিফল্ট করুন ।

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