'CONCAT' एक मान्यता प्राप्त बिल्ट-इन फ़ंक्शन नाम नहीं है


24

एक ग्राहक ने बताया कि वे SQL सर्वर 2012 पर चल रहे थे, और हमने अंतिम वितरण से पहले परीक्षण के लिए कुछ परीक्षण प्रश्न दिए, हालांकि:

'CONCAT' एक मान्यता प्राप्त बिल्ट-इन फ़ंक्शन नाम नहीं है।

मैं समझता हूं कि CONCAT()SQL सर्वर 2012 में पेश किया गया एक नया बिल्ट-इन फंक्शन है, जो सभी ठीक और अच्छी तरह से है, हालांकि मुझे इस बदलाव की आड़ में अपने बदलाव को वापस करने के लिए कहा गया है, जो कि उपयोगकर्ता "क्वेरी निष्पादित करने वाले" के तहत संगत नहीं कर सकते हैं। निष्पादित करने के लिए Transact-SQL अनुमतियाँ हैं। " इसलिए मैं सिर्फ अपनी बात को साबित कर रहा हूं कि क्लाइंट के पास सबसे ज्यादा संभावना है कि वे SQL सर्वर का एक अलग संस्करण DEV में स्थापित करते हैं, जैसे कि वे PROD में करते हैं।

मुझे विशेष रूप से SELECT/EXECUTEअंतर्निहित स्केलर मूल्यवान कार्यों के लिए अनुमति देने से इनकार करने के बारे में कोई जानकारी नहीं मिल सकती है , लेकिन क्या यह संभव है, और यदि उपयोगकर्ता अभी भी एक ही त्रुटि पाठ प्राप्त करता है?


यदि कॉनसैट काम नहीं कर रहा है, तो इसे आज़माएंSELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
नीलाचल सेठी

CONCAT दशमलव प्रकार के समापक (ID + '_' + OtherID) का समर्थन करता है, ID अंतर प्रकार हो सकता है।
झांग

पुराने संस्करणों में, इसके बजाय इसका उपयोग करें:DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
जैक व्हिटकेकर

जवाबों:


21

CONCATSQL सर्वर 2012 में पेश किया गया था; SQL Server 2008 R2 में इसे काम करने का कोई तरीका नहीं है। से प्रलेखन :

यहाँ छवि विवरण दर्ज करें

संगतता स्तर के साथ 2012+ में भी इसे विफल बनाने का कोई तरीका नहीं है। तो अपने लोगों SELECT @@VERSION;को दोनों सर्वरों पर जांच करें ; आप पाएंगे कि CONCATयह कहाँ विफल हो जाता है <11. अपने कोड को पहले के संस्करणों के साथ संगत बनाने के लिए, आपको मानक स्ट्रिंग संयोजन ऑपरेटर ( +) का उपयोग करने की आवश्यकता होगी । मैं कैसे आप एक अदिश समारोह के साथ ऐसा होता है, जब तक कि आप हमेशा इस्तेमाल किया पता नहीं है सटीक इनपुट तार के एक ही नंबर और आप का उपयोग करने के लिए अपने कोड बदलने dbo.CONCAT()के बजाय CONCAT()(वहाँ परिदृश्य होंगे जहां वह मायने रखती हो जाएगा, साथ ही आपके समारोह कुछ भी करता है, तो देशी नहीं करता है, आप लगातार व्यवहार चाहते हैं यदि आप उन्नयन करते हैं /)। इसलिए मैं उस दृष्टिकोण की सिफारिश नहीं करूंगा। आपको जोड़ना भी पड़ सकता हैNULL हैंडलिंग और अन्य छोटे परिवर्तन (आपकी मौजूदा स्क्रिप्ट को ठीक से कैसे बदलना है, यह बताना असंभव है, अगर हम इसे नहीं देख सकते हैं)।


धन्यवाद, हारून। कोड को बदलने के लिए तुच्छ है, क्योंकि CONCAT () का उपयोग SP_ExecuteSQL डायनेमिक SQL कॉल से पहले कुछ तार को एक साथ जोड़ने के लिए किया जाता है। मैं वास्तव में सिर्फ इस बात की पुष्टि करना चाहता था कि SQL Server 2012 में CONCAT () का उपयोग करने से इनकार करने का कोई तरीका नहीं था
बीका

1
@beeks मैं उपयोगकर्ताओं को उपयोग करने की क्षमता से इनकार करने का कोई तरीका नहीं जानता CONCAT(), नहीं। हालांकि, 2008 R2 पर कोड काम करने के लिए आपको जो कुछ भी करने की आवश्यकता है उस पर मैं काफी असर नहीं डालता। आपको निकालने की जरूरत है CONCAT(), इसे जोड़ने की नहीं।
हारून बर्ट्रेंड

1
हां, मैं समझता हूं कि कोड को 2008 R2 के साथ संगत कैसे बनाया जाए, जो कि तुच्छ है। यह पुष्टि करने के लिए धन्यवाद कि कोई DENYइस फ़ंक्शन तक नहीं पहुंच सकता है।
बीक

बस ध्यान देने के लिए जब कॉनैट को + में बदलने के लिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि समवर्ती होने वाले मूल्यों को शुरू करने के लिए तार हैं, यदि आपके पास कोई संख्यात्मक क्षेत्र हैं, तो यह उन्हें जोड़ने की कोशिश करेगा (और विफल हो सकता है क्योंकि एक स्ट्रिंग इंट नहीं है) वहाँ संख्यात्मक फ़ील्ड (प्रकार) आप परिवर्तित / पहले एक स्ट्रिंग के लिए इसे डाली सुनिश्चित करें
Ste Bov

3

आप इस तरह ODBC CONCAT फ़ंक्शन का उपयोग कर सकते हैं:

SELECT {fn CONCAT('foo ', 'test') }

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

SELECT {fn CONCAT('foo ', {fn CONCAT('test ', 'buddy')}) }

आप बस '+' ऑपरेटर का उपयोग कर सकते हैं।

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