2010-06-19 11 views
9

मैं) पता करने के लिए नीचे के रूप में मैं क्यों डिफ़ॉल्ट मान सेट नहीं कर सकता getdate को (दिनांक पैरामीटर सपा हैं:हम संग्रहीत प्रक्रिया = getDate() में डेटाटाइम पैरामीटर का डिफ़ॉल्ट मान क्यों सेट नहीं कर सकते हैं?

Create PROCEDURE [dbo].[UPILog] 
(
    @UserID bigint, 
    @ActionID smallint, 
    @Details nvarchar(MAX) = null, 
    @Created datetime = getdate() 
) 

अगर मैं बचाने की कोशिश यह मुझे एक संकलक त्रुटि

Msg 102, Level 15, State 1, Procedure UPILog, Line XX 
    Incorrect syntax near '('. 
दे देंगे

संपादित करें: मुझे पता है कि मैं इसे पसंद

नीचे
Create PROCEDURE [dbo].[UPILog] 
(
    @UserID bigint, 
    @ActionID smallint, 
    @Details nvarchar(MAX) = null, 
    @Created datetime = null 
) 
AS 
if @Created is null 
    SET @Created=getdate() ... 

उत्तर

3

आप एक समारोह कॉल उपयोग नहीं कर सकते कर सकते हैं एक डिफ़ॉल्ट पैरामीटर मान के रूप में।

यह काम करना आसान है: सेट करने पर getdate() पर अपना कॉलिंग पैरामीटर सेट करें।

+0

मैं इसका उपयोग क्यों नहीं कर सकता .. क्या एसक्यूएल इंजन करना आसान नहीं होगा? –

+0

क्या कोई स्पष्टीकरण है कि यह इसे क्यों स्वीकार नहीं कर सकता .. या यह SQL सर्वर नियम के समान है जो डिफ़ॉल्ट पैरामीटर –

+0

के रूप में फ़ंक्शन को कॉल नहीं कर सकता है, इसे निरंतर मान होना चाहिए। –

1

सरलतम शब्दों में इसे कुछ निरंतर मूल्य होना चाहिए और GetDate() एक फ़ंक्शन कॉल है।

17

यदि आप @Created को डिफ़ॉल्ट के रूप में उपयोग करना चाहते हैं, तो डिफ़ॉल्ट पैरामीटर मान के रूप में शून्य सेट करें और @ spreated पैरामीटर को getdate() के साथ सेट करें यदि यह आपके स्पैम में शून्य के साथ आता है।

... 
    @CreateDate datetime = null 
) 
AS 
    if @CreateDate is null 
     set @CreateDate = getdate() 
... 
0

आप पैरामीटर मान के रूप में फ़ंक्शन का उपयोग नहीं कर सकते हैं। मैं क्या करता हूं कि मैं '1 9 00-01-01' जैसी स्कोप तिथि से कुछ पैरामीटर सेट करता हूं और फिर मैं इसे proc में जांचता हूं। उदाहरण के लिए:

CREATE PROC uspDataCompare 
    @CompareDate DATE = '1900-01-01' 
AS 

IF @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE()) 
संबंधित मुद्दे

 संबंधित मुद्दे