2010-09-15 9 views
6

मेरे पास एक संग्रहीत प्रक्रिया है जो आईडी की पाइप सीमित सरणी की एक स्ट्रिंग लेती है और उन्हें बाहर निकाल देती है। मैं यह लेनदेन में होना चाहता हूं, इसलिए उन्हें एक समय में एक में पास नहीं करना चाहते हैं।क्या वर्चर (अधिकतम) को संग्रहीत प्रक्रिया तर्क के रूप में उपयोग करना अच्छा विचार है?

अगर मैं के रूप में varchar (max) का उपयोग में पारित तर्क के आकार को सीमित नहीं करने के लिए, होगा इस कारण समस्या है? मुझे हिट होने की सीमा दिखाई नहीं दे रही है, लेकिन मैं स्ट्रिंग पर मनमाने ढंग से सीमा अनुमान लगाने या स्थानांतरित नहीं करना चाहता हूं।

CREATE PROCEDURE myProc 
    @IDs varchar(max) 
AS 

BEGIN 
    ... 
END 
GO 

उत्तर

3

वहाँ यह करने के लिए काफी नहीं है। varchar(max) जब तक आप 8000 वर्णों से ऊपर नहीं जाते, तब तक 8000 वर्णों से कम किसी भी वर्चर की तरह व्यवहार करते हैं। यदि वास्तविक डेटा 8000 वर्णों से कम है तो varchar(200) और varchar(max) के बीच कोई अंतर नहीं होना चाहिए। यदि आप छोटे इनपुट की अपेक्षा कर रहे हैं लेकिन बड़े इनपुट को रद्द नहीं कर सकते हैं, तो varchar(max) बहुत अच्छा है।

2

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

+0

उपयोग कर रहे हैं अगर यह मान की एक सरल सूची है के अलावा (नहीं बहु-मान) एक्सएमएल का एक बहुत कहते हैं संचार करने के लिए अतिरिक्त डेटा (सभी टैग)। –

+0

मैंने इस उद्देश्य के लिए XML का उपयोग करने के बारे में अन्य सुझावों को देखा है, लेकिन मैं जोड़ूंगा कि 'वर्कर (MAX)' का उपयोग करके निश्चित रूप से समस्याएं उत्पन्न नहीं होंगी। SQL सर्वर पुस्तकें ऑनलाइन [SQL सर्वर 2005 के लिए] के अनुसार अभी भी एक 'मनमानी' सीमा है (2147483647 वर्ण), लेकिन यह @ केएम के रूप में "व्यावहारिक रूप से असीमित" है। –

+0

हाँ मैं मूल्यों की एक सूची के लिए एक्सएमएल का उपयोग करने के लिए तैयार हूं। – Kenoyer130

0

मैं varchar (max) जब मैं सीमा नहीं जानता का उपयोग करें (क्या अपने वहाँ thats के लिए)। हमेशा अच्छा एक निश्चित लंबाई के साथ चर सेट करने के लिए है, लेकिन अज्ञात अगर यह स्वीकार्य है, और बढ़ती थोड़ा बड़ा अपने डेटाबेस के अलावा कोई भी समस्याओं का कारण नहीं होगा, और

1

हैं में डेटा की बड़ी राशि को धोखा देने में सक्षम लोग आप SQL Server 2008 पर हैं, तो मैं एक तालिका मूल्यवान पैरामीटर का उपयोग करता हूं। यदि नहीं, तो मैं हमेशा सबसे छोटे आकार का उपयोग करना पसंद करता हूं, लेकिन मुझे नहीं लगता कि क्यों MAX संग्रहीत प्रक्रिया पैरामीटर के रूप में किसी भी समस्या का कारण बनता है। यदि आप MAX के लिए जाने के बजाय पैरामीटर को व्यावहारिक रूप से असीमित होना चाहते हैं।

-1

टीएसक्यूएल एक अच्छी स्ट्रिंग मैनिपुलेशन भाषा नहीं है, और प्रदर्शन-वार (और कोड वार!) आप डीबी के बाहर स्ट्रिंग को पार्स करने से बेहतर होंगे - तो n8wrl's answer पर +1 करें। आंतरिक रूप से, इसके लिए varchar(max) का उपयोग करने में कुछ भी गलत नहीं है।

n8wrl तरह का सुझाव दिया XML का उपयोग, एक Table Valued Parameter एक अच्छा विकल्प हो सकता है आप एसक्यूएल सर्वर 2008

+0

मैं प्रसंस्करण को लेनदेन में लपेटना चाहता हूं, इसका मतलब है कि मैं इसे डीबी के बाहर पार्स नहीं करना चाहता हूं। – Kenoyer130

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

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