Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में एकल उद्धरण से बचना

सलाह का एक शब्द। डायनेमिक स्क्रिप्ट का परीक्षण करते समय, पहले इसे निष्पादित करने के बजाय इसे प्रदर्शित करें। इस तरह आप इसे ठीक वैसे ही देख पाएंगे जैसे EXEC . द्वारा देखा जाएगा बयान।

अब मुद्दे पर। आपको यह ध्यान रखना चाहिए कि आप चर . को पारित नहीं कर रहे हैं करने के लिए SplitValues लेकिन इसके बजाय वेरिएबल के मान को स्क्रिप्ट में जोड़ रहे हैं। चूंकि मान varchar . है , इसे इसके चारों ओर उद्धरण चिह्नों के साथ जोड़ा जाना चाहिए। उनकी अनुपस्थिति ही वास्तव में एकमात्र समस्या है।

दूसरे तर्क के आसपास के उद्धरण, अल्पविराम, सही ढंग से बच गए हैं दोनों मामलों में . तो, पहले तर्क के आसपास उद्धरण जोड़ने के लिए किसी भी तरीके का उपयोग करें:

  • उद्धरण चिह्न की पुनरावृत्ति:

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','','')';
    SELECT @sql;
    
  • CHAR(39) . का उपयोग करके :

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(' + CHAR(39) + @year + CHAR(39) + ',' + CHAR(39) + ',' + CHAR(39) + ')';
    SELECT @sql;
    

जाहिर है, पहली विधि अधिक कॉम्पैक्ट है, लेकिन, जैसा मैंने कहा, दोनों अच्छी तरह से काम करते हैं, जैसा कि यह SQL Fiddle डेमो स्पष्ट रूप से दिखाता है।

हालाँकि, ध्यान दें कि यदि आप सजा को माफ कर देते हैं, तो आप इस मुद्दे से आसानी से बच सकते हैं। EXEC () . के बजाय , आप उपयोग कर सकते हैं EXEC sp_executesql , जो आपको पैरामीटर . का उपयोग करने की अनुमति देता है . यहाँ वही स्क्रिप्ट है जिसे sp_executesql use का उपयोग करने के लिए फिर से लिखा गया है :

DECLARE @year varchar(max), @delim char(1);
SET @year = '111,11';
SET @delim = ',';
EXEC sp_executesql
  N'SELECT * FROM SplitValues(@year_param,@delim_param)',
  N'@year_param varchar(max), @delim_param char(1)',
  @year,@delim;

जैसा कि आप देख सकते हैं, उद्धरणों से बचने के बारे में चिंता करने की कोई आवश्यकता नहीं है:SQL सर्वर मूल्यों को सही ढंग से प्रतिस्थापित करने की परेशानी लेता है, आप नहीं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में एकाधिक वर्णों को कैसे बदलें?

  2. SQL सर्वर (C# क्लाइंट) में बहुत अधिक डेटा सम्मिलित करने का सबसे तेज़ तरीका क्या है

  3. SQL सर्वर डेटाबेस CPU उपयोग आँकड़े

  4. तारों को जोड़ने/एकत्रित करने का इष्टतम तरीका

  5. वापसी मूल्य के साथ संग्रहित प्रक्रिया को कॉल करना