हमने आपके उदाहरण के समान बहुत काम किया है। हम एसक्यूएल इंजेक्शन के बारे में चिंतित नहीं हैं, आंशिक रूप से क्योंकि हमारे पास डेटा पर पूर्ण और पूर्ण नियंत्रण है - हमारे डेटा वेयरहाउस में ईटीएल के माध्यम से दुर्भावनापूर्ण कोड प्राप्त करने का कोई तरीका नहीं है।
कुछ विचार और सलाह:
- क्या आपको nvarcahr(500) कॉलम के साथ पिवट करने की आवश्यकता है? हमारे वर्चर (25) या अंक हैं, और वहां से हानिकारक कोड को छिपाना बहुत कठिन होगा।
- डेटा जाँच के बारे में क्या? ऐसा लगता है कि अगर उन स्ट्रिंग्स में से एक में "]" वर्ण है, तो यह या तो हैक करने का प्रयास है या डेटा जो वैसे भी आप पर बरस जाएगा।
- आपकी सुरक्षा कितनी मजबूत है? क्या सिस्टम इस तरह से लॉक हो गया है कि मैलोरी अपने हैक को आपके डेटाबेस (या तो सीधे या आपके एप्लिकेशन के माध्यम से) में प्रवेश नहीं कर सकता है?
हा। फ़ंक्शन QUOTENAME() को याद रखने के लिए यह सब लिखना पड़ा। एक त्वरित परीक्षण यह इंगित करने के लिए प्रतीत होता है कि इसे अपने कोड में जोड़ना काम करेगा (आपको एक त्रुटि मिलेगी, न कि गिराई गई अस्थायी तालिका):
SELECT
@columns =
STUFF
(
(
SELECT DISTINCT
', [' + quotename(ColumnB, ']') + ']'
FROM
#PivotTest
FOR XML PATH('')
), 1, 1, ''
)
यह धुरी (और अनपिवट) स्थितियों के लिए काम करना चाहिए, क्योंकि आपको लगभग हमेशा अपने मूल्यों को [ब्रैकेट] करना होता है।