GETDATE के साथ संग्रहीत प्रक्रिया को ')' के पास गलत सिंटैक्स


121

शायद मैं 'दोपहर ’का एक पल बिता रहा हूं, लेकिन क्या कोई समझा सकता है कि मुझे क्यों मिला

एमएसजी 102, लेवल 15, स्टेट 1, लाइन 2
'के पास गलत सिंटैक्स')।

दौड़ते समय

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

जवाबों:


170

आप अपनी संग्रहित प्रक्रिया के तर्क के रूप में एक फ़ंक्शन कॉल में पास नहीं हो सकते। इसके बजाय एक मध्यवर्ती चर का उपयोग करें:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
क्या इस प्रतिबंध का एक कारण है?
ज़मीर

@student क्या मूल प्रतिबंधों की एक वजह है जैसे कि बूलियन और पूर्णांक स्तंभ प्रकारों की कमी या Oracle में फ़िल्टर की गई कुंजियों की कमी ...?
स्किपर

20

जैसा कि मिच गेहूं ने उल्लेख किया है कि आप एक फ़ंक्शन पास नहीं कर सकते।

यदि आपके मामले में आपको एक पूर्व-निर्धारित मूल्य या GETDATE () में पास होना चाहिए - तो आप डिफ़ॉल्ट मान का उपयोग कर सकते हैं। उदाहरण के लिए, अपनी संग्रहीत प्रक्रिया को संशोधित करें:

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

और फिर कोशिश करें:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

टिप्पणी : यहाँ मेरा मानना ​​था कि NULL मान इस पैरामीटर के लिए उपयोग में नहीं है। यदि यह आपका मामला नहीं है - आप एक और अप्रयुक्त मूल्य का उपयोग कर सकते हैं, उदाहरण के लिए '1900-01-01 00: 00: 00.000'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.