2008-12-12 21 views
49

मैं प्रश्न ब्राउज़ और इस देखा गया था:एसक्यूएल में "@" प्रतीक क्या करता है?

SELECT prodid, issue 
FROM Sales 
WHERE custid = @custid 
AND datesold = SELECT MAX(datesold) 
      FROM Sales s 
      WHERE s.prodid = Sales.prodid 
        AND s.issue = Sales.issue 
        AND s.custid = @custid 

मैं सोच रहा था क्या "@" ग्राहकआईडी के सामने करता है? क्या यह चयनित तालिका से custid को संदर्भित करने का एक तरीका है?

उत्तर

38

@CustID मतलब है कि यह एक पैरामीटर है कि आप बाद में अपने कोड में के लिए एक मूल्य की आपूर्ति करेगा है प्रयोग किया जाता है, और। एसक्यूएल इंजेक्शन के खिलाफ सुरक्षा का यह सबसे अच्छा तरीका है। स्ट्रिंग्स और वेरिएबल्स को संयोजित करने के बजाय पैरामीटर का उपयोग करके अपनी क्वेरी बनाएं। डेटाबेस इंजन पैरामीटर मान को प्लेसहोल्डर कहां रखता है, और एसक्यूएल इंजेक्शन के लिए शून्य मौका है।

+0

शून्य? वास्तव में? 'चुनें * टैबलेट से आईडी =' और @ किबीबी –

+8

@ मार्क: क्या आप समझा सकते हैं कि यह एक वैध एसक्यूएल इंजेक्शन प्रयास कैसे है? जहां तक ​​मैं देख सकता हूं, एसक्यूएलसेवर को भेजे जाने पर यह त्रुटि होगी। –

+3

एसक्यूएल इंजेक्शन की कोई संभावना नहीं है कि 'कस्टिड' को स्ट्रिंग के साथ बदल दिया गया है। जब वह डेटाबेस इन चरों में से एक प्राप्त करता है तो यह जानता है कि इसके अंदर किसी भी चीज़ के लिए चर से बचने के लिए नहीं। – Patrick548

24

@ एक उपसर्ग संग्रहीत प्रक्रिया और समारोह पैरामीटर नाम दर्शाने के रूप में भी चर नाम

1

यह एक पैरामीटर है जिसे आपको परिभाषित करने की आवश्यकता है। एसक्यूएल इंजेक्शन को रोकने के लिए आपको अपने सभी वैरिएबल को पैरामीटर के रूप में पास करना चाहिए।

1

आप MySQL सिंटैक्स का इस्तेमाल किया जा सकता है: Microsoft SQL @ रूप में ही है MySQL के ?

2

तो आप क्या @ ग्राहकआईडी के मूल्य इस चयन क्वेरी के अंदर या पहले है आप क्वेरी करना तय करेगा?

ऐसा कुछ?

SET @custID = '1'; 
+0

यदि एसक्यूएल एक संग्रहीत प्रक्रिया है, तो आप इसे क्वेरी से पहले सेट करेंगे। इसके लिए विवरण भाषा \ प्लेटफार्म विशिष्ट हैं। यदि यह एक शुद्ध क्वेरी है तो आपको चर को परिभाषित करना होगा और फिर इसे सेट करना होगा: DECLARE @custID int SET @custID = 1; –

1

आप जिस बारे में बात कर रहे हैं वह पैरामीटरयुक्त क्वेरी लिखी गई है। '@' बस इंगित करता है कि यह एक पैरामीटर है। आप निष्पादन प्रक्रिया

eg: 
sqlcommand cmd = new sqlcommand(query,connection); 
cmd.parameters.add("@custid","1"); 
sqldatareader dr = cmd.executequery(); 
0
publish data where stoloc = 'AB143' 
| 
[select prtnum where stoloc = @stoloc] 

यह कैसे काम करता है @ है के दौरान उस पैरामीटर के लिए मूल्य जोड़ सकते हैं।

+3

आपके उत्तर में यह बताते हुए अधिक विवरण दें कि '@' कैसे काम करता है। –

0

@ एक संख्या के बाद वे एक फ़ंक्शन में सूचीबद्ध क्रम में पैरामीटर हैं।

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