दिलचस्प पोस्ट
सी # तिथि समय.अब परिशुद्धता Angular.js। एनजी-दोहराने पुनरावृत्तियों को कैसे गणना करें, जो कस्टम फ़िल्टर को संतुष्ट करते हैं एक्सेल के लिए सीएसवी फ़ाइल जनरेट करना, मूल्य के अंदर एक नई लाइन कैसे है क्या java.util.Date समयक्षेत्र का उपयोग कर रहा है? <में अंतर क्या है <? सुपर ई> और <? ई विस्तारित? क्या मतलब है? (जावास्क्रिप्ट) जब मैं सी में malloc का उपयोग करना चाहिए और जब मैं नहीं? गिटहब में फोरिंग बनाम शाखाएं क्या सी ++ में मुख्य हस्ताक्षर के तर्कों में अनग्रेड और कॉन्स्ट क्वालिफायर हैं? मैं सी # में प्रगति बार कैसे लागू करूं? विंडोज के लिए सबसे अच्छा मुफ्त सी + + प्रोफाइलर क्या है? चौड़ाई फिट करने के लिए सीएसएस की पृष्ठभूमि की छवि, ऊँचाई अनुपात में स्वतः पैमाने पर होना चाहिए जावास्क्रिप्ट में संपत्ति के माध्यम से वस्तुओं का समूह सिंगलटन के साथ यूनिट परीक्षण ऐप कॉमपैप 22.1 और उससे ऊपर के नए अलर्ट डाइलॉग का उपयोग कैसे करें और कैसे करें

SQL सर्वर चेक केस-संवेदनशीलता?

मैं कैसे देख सकता हूँ कि SQL सर्वर में एक डेटाबेस केस-सेंसिटिव है या नहीं? मैं पहले से ही क्वेरी चला रहा हूं:

SELECT CASE WHEN 'A' = 'a' THEN 'NOT CASE SENSITIVE' ELSE 'CASE SENSITIVE' END 

लेकिन मैं अन्य तरीकों की तलाश कर रहा हूं क्योंकि इसने मुझे वास्तव में अतीत में मुद्दे दिए हैं।

संपादित करें – थोड़ा और अधिक जानकारी: मौजूदा उत्पाद में कई पूर्व-लिखित संग्रहित प्रक्रियाएं हैं एक संग्रहीत कार्यविधि @test != @TEST में सर्वर की स्वयं की संवेदनशीलता के आधार पर। इसलिए जो मैं देख रहा हूं वह इसकी संवेदनशीलता के लिए सर्वर को जांचने का सबसे अच्छा तरीका है

वेब के समाधान से एकत्रित समाधान "SQL सर्वर चेक केस-संवेदनशीलता?"

कोलेक्शन विभिन्न स्तरों पर सेट किया जा सकता है:

  1. सर्वर
  2. डेटाबेस
  3. स्तंभ

तो आप केस संवेदी डेटाबेस के मामले में एक संवेदनशील संवेदनशील कॉलम हो सकते हैं। मैं अभी तक ऐसे किसी भी परिस्थिति में नहीं आया हूं जहां केस के एक कॉलम की संवेदनशीलता के मामले में कोई व्यवसाय मामला बना सकता है, लेकिन मुझे लगता है कि यह हो सकता है।

सर्वर कोलेशन जांचें

 SELECT SERVERPROPERTY('COLLATION') 

डाटाबेस कोलेशन जांचें

 SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

कॉलम कोलेशन जांचें

 select table_name, column_name, collation_name from INFORMATION_SCHEMA.COLUMNS where table_name = @table_name 

यदि आप डिफ़ॉल्ट कोलेशन विकल्पों के साथ SQL सर्वर स्थापित करते हैं, तो आप निम्न क्वेरीज़ एक ही परिणाम वापस आ सकते हैं:

 CREATE TABLE mytable ( mycolumn VARCHAR(10) ) GO SET NOCOUNT ON INSERT mytable VALUES('Case') GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case' 

आप कॉलम स्तर पर कॉलेशन को मजबूती से अपनी क्वेरी बदल सकते हैं:

 SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'case' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case' -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case' SELECT DATABASEPROPERTYEX('<database name>', 'Collation') 

इस सेटिंग को बदलने से अनुप्रयोगों और एसक्यूएल प्रश्नों को प्रभावित किया जा सकता है, मैं पहले इस परीक्षा को अलग करेगा। एसक्यूएल सर्वर 2000 से, आप आसानी से एक विशिष्ट कॉलम के सॉर्ट क्रम को बदलने के लिए एक वैकल्पिक तालिका स्टेटमेंट चला सकते हैं, इसे केस सेंसिटिव होने के लिए मजबूर कर सकते हैं सबसे पहले, यह निर्धारित करने के लिए कि आपको इसे वापस बदलने की क्या आवश्यकता है, निम्न क्वेरी निष्पादित करें:

 EXEC sp_help 'mytable' 

दूसरे रिकॉर्डसेट में निम्न जानकारी होनी चाहिए, एक डिफ़ॉल्ट परिदृश्य में:

कॉलम_नाम कोलेशन


mycolumn SQL_Latin1_General_CP1_CI_AS

'कोलेशन' कॉलम जो भी हो, आपको अब यह पता है कि आपको निम्न परिवर्तन करने के बाद इसे वापस बदलने की आवश्यकता है, जो कि मामले संवेदनशीलता को बल देगा:

 ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE Latin1_General_CS_AS GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case' 

यदि इस शिकंजा को चीजें होती हैं, तो आप इसे बदल सकते हैं, बस एक नया वैकल्पिक तालिका जारी करके (पहले से मैंने पाया कि मेरे कॉललेट पहचानकर्ता को बदलने के लिए सुनिश्चित करें):

 ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE SQL_Latin1_General_CP1_CI_AS 

यदि आप SQL Server 7.0 के साथ जुड़े हुए हैं, तो आप इस समाधान की कोशिश कर सकते हैं, जो एक प्रदर्शन हिट की थोड़ी अधिक हो सकती है (आपको केवल पहले मैच के लिए परिणाम प्राप्त करना चाहिए):

 SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10)) -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case' 

SQL सर्वर COLLATION द्वारा केस संवेदनशीलता निर्धारित करता है

COLLATION विभिन्न स्तरों पर सेट किया जा सकता है।

  1. सर्वर-स्तर
  2. डाटाबेस स्तरीय
  3. कॉलम स्तरीय
  4. अभिव्यक्ति-स्तर

यहां एमएसडीएन संदर्भ है

राज मोरे के उत्तर में वर्णित प्रत्येक स्तर पर एक COLLATION जांच कर सकते हैं।

सर्वर कोलेशन जांचें

 SELECT SERVERPROPERTY('COLLATION') 

डाटाबेस कोलेशन जांचें

 SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

कॉलम कोलेशन जांचें

 select table_name, column_name, collation_name from INFORMATION_SCHEMA.COLUMNS where table_name = @table_name 

अभिव्यक्ति कोलेशन जांचें

अभिव्यक्ति स्तर COLLATION आपको अभिव्यक्ति को देखने की आवश्यकता है। 🙂

यह आम तौर पर अभिव्यक्ति के अंत में होगा जैसा कि नीचे के उदाहरण में है।

 SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI; 

कोलेशन विवरण

प्रत्येक COLLATION मान का विवरण प्राप्त करने के लिए यह प्रयास करें।

 SELECT * FROM fn_helpcollations() 

और आपको ऐसा कुछ देखना चाहिए।

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

आप हमेशा अपने COLLATION लिए विवरण फ़िल्टर और देखने के लिए एक WHERE क्लाज डाल सकते हैं

आप यहाँ मिलान की एक सूची पा सकते हैं।

आप कोलेशन में रुचि रखते हैं आप इस स्निपेट के आधार पर कुछ बना सकते हैं:

 SELECT DATABASEPROPERTYEX('master', 'Collation'); 

अद्यतन करें
आपके संपादन के आधार पर – यदि @test और @TEST दो अलग-अलग चर का उल्लेख कर सकते हैं, तो यह SQL सर्वर नहीं है। यदि आपको समस्याएं दिखाई देंगी जहां एक ही चर स्वयं के बराबर नहीं है, तो जांच लें कि वह चर NULL , क्योंकि NULL = NULL रिटर्न `गलत है।

पहले से निर्मित तालिकाओं के साथ काम करने का सबसे अच्छा तरीका यह है कि, एसक्यूएल सर्वर क्वेरी एडिटर पर जाएं

प्रकार: sp_help <tablename>

यह तालिका की संरचना दिखाएगा, इच्छित कॉलम के लिए COLTATE कॉलम के विवरण देखें।

फिर क्वेरी की तरह टाइप करें:

 SELECT myColumn FROM myTable WHERE myColumn COLLATE SQL_Latin1_General_CP1_CI_AS = 'Case' 

यह भिन्न वर्ण स्कीमा हो सकता है < SQL_Latin1_General_CP1_CI_AS >, उस स्तंभ के विरुद्ध उपयोग किए गए सटीक स्कीमा को खोजने के लिए बेहतर है

मैं कैसे देख सकता हूँ कि SQL सर्वर में एक डेटाबेस केस-सेंसिटिव है या नहीं?

आप नीचे दिए गए क्वेरी का उपयोग कर सकते हैं जो आपके सूचित डेटाबेस को संवेदनशील करता है या नहीं या बाइनरी सॉर्ट में है (नल परिणाम के साथ):

 ;WITH collations AS ( SELECT name, CASE WHEN description like '%case-insensitive%' THEN 0 WHEN description like '%case-sensitive%' THEN 1 END isCaseSensitive FROM sys.fn_helpcollations() ) SELECT * FROM collations WHERE name = CONVERT(varchar, DATABASEPROPERTYEX('yourDatabaseName','collation')); 

इस एमएसडीएन जानकारी को और अधिक पढ़ें;)

SQL सर्वर केस संवेदनशील नहीं है। SELECT * FROM SomeTable SeLeCT * frOM soMetaBLe