2010-06-18 15 views
6

मैं वर्तमान में एक गतिशील तालिका नाम के साथ एक टी-एसक्यूएल कथन निष्पादित करने के लिए sp_executesql का उपयोग कर रहा हूं। हालांकि, यह की तरह कुछ देखने के लिए वास्तव में बदसूरत है:SQL सर्वर में, मैं किसी तालिका में संदर्भ चर कैसे बना सकता हूं?

set @sql = 'UPDATE '+Table_Name+' SET ... WHERE '+someVar+' = ... AND '+someVar2' = ...' 
sp_executesql @sql 

क्या मैं नहीं बल्कि करना चाहते हैं एक टेबल चर एक मेज के लिए एक संदर्भ है, जिनमें से है, इसलिए मैं उदाहरण के लिए कर सकता है:

UPDATE TableRef SET ... WHERE ... 

क्योंकि जब मेरे पास वास्तव में लंबे समय तक टी-एसक्यूएल स्टेटमेंट होता है तो इसे स्ट्रिंग के भीतर प्रारूप के कारण पढ़ने में वाकई मुश्किल होती है।

कोई भी सुझाव उपयोगी होगा।

+0

बीटीडब्ल्यू, 'एसईटी एसक्यूएल = ... 'लेकिन' एसईटी @ एसक्यूएल = ... ' – abatishchev

+0

हाँ, फिक्स के लिए धन्यवाद। जब मैंने दबाया तो मैं ब्लॉकक्वाट प्राप्त कर रहा था। मुझे पता नहीं था कि मैं ऐसा कर सकता हूं। धन्यवाद। –

+0

ón: उत्पाद को "SQL सर्वर" कहा जाता है, न कि "MSSQL"। –

उत्तर

1

आप पैरामीटर को sp_executeSQL के बजाय क्यों नहीं पारित करते हैं?

http://msdn.microsoft.com/en-us/library/ms188001.aspx

मैं भी इस लेख के लिए पठन भी http://www.sommarskog.se/dynamic_sql.html

+0

उचित लगता है, उपयोगी वेबसाइटों के लिए धन्यवाद। चूंकि एक चर में किसी तालिका को संदर्भित करना संभव नहीं है, इसलिए मैं आपको इस प्रश्न का उत्तर के रूप में चिह्नित करूंगा। धन्यवाद। –

0

आप नहीं कर सकते हैं होगा। यदि आप अपने एसक्यूएल में एक गतिशील तालिका नाम का उपयोग करना चाहते हैं, तो आपको इसे अपनी स्ट्रिंग में जोड़ना होगा।

यदि आपके पास अपनी क्वेरी के भीतर तालिका नाम के बहुत सारे संदर्भ हैं, तो आप तालिका नाम को अलियासिंग करके इसे छोटा कर सकते हैं, और अन्य सभी उदाहरणों के लिए, उपनाम का उपयोग करें।

उदा।

SET @SQL = 'UPDATE t SET.... FROM ' + @TableName + ' t WHERE ....' 

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

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

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