2011-03-18 13 views
8

पर अनसुलझा संदर्भ मैंने अपने एसक्यूएल सर्वर 2005 डेटाबेस को एक वीएस -2010 डेटाबेस प्रोजेक्ट में आयात किया है। मेरी संग्रहित प्रक्रियाओं में से एक एक बयान के #myTemp जांचविजुअल स्टूडियो डाटाबेस प्रोजेक्ट - टेम्पल टेबल

सम्मिलित समान होता है ...

और विजुअल स्टूडियो मुझे एक चेतावनी के रूप में

SQL04151 देता है: प्रक्रिया: [dbo ]। [mySproc] ऑब्जेक्ट [#myTemp] के लिए एक अनसुलझा संदर्भ है।

क्या इस संदर्भ को हल करने का कोई तरीका है? मैं जितना संभव हो सके परियोजना चेतावनियों को साफ़ करना चाहता हूं।

+0

क्या संग्रहीत प्रक्रिया में अस्थायी तालिका बनाई गई है? – Thomas

+0

नहीं, इस मामले में अस्थायी तालिका "पैरेंट" संग्रहीत प्रो द्वारा बनाई गई है जो तब लूप में इसे एक बार कई बार कॉल करती है :( – Nick

उत्तर

1

तुम यहाँ (VS 2010 build database project receive SQL04151)

के रूप में तीन भाग नामकरण की कोशिश इसके अलावा, आप गुरु के बजाय tempdb के लिए डाटाबेस रेफरी बदलनी होगी क्या। इस आलेख को देखें (http://blogs.msdn.com/b/gertd/archive/2009/06/10/system-objects-in-tempdb.aspx)। यह sys ऑब्जेक्ट्स का वर्णन करता है लेकिन tempdb में अस्थायी तालिकाओं को संग्रहीत किया जाता है, इसलिए एक ही व्यवहार प्रदर्शित करेगा।

0

यदि आप जानते हैं कि आपके कोड में कोई समस्या नहीं है, तो आप बिल्ड चेतावनियों को दबा सकते हैं। अपनी प्रोजेक्ट की सेटिंग्स पर जाएं और आपको बिल्ड नामक एक टैब मिलेगा। उन कोडों को जोड़ने के लिए वहां एक फ़ील्ड है जहां आप दबाना चाहते हैं। मैंने कदम उठाए और this page पाया, चरणों का वर्णन किया।

+4

मुझे नहीं लगता कि सभी SQL04151 त्रुटियों को दबाकर यह एक अच्छा विचार है। निश्चित रूप से आप 'temp टेबल संदेशों से छुटकारा पायेगा, लेकिन आप हर दूसरे डीबी संदर्भ चेतावनी को भी दबाएंगे ... – GordonB

+0

फिर उपयोग करें: '#pragma चेतावनी अक्षम 4151 /* कुछ कोड */ #pragma चेतावनी बहाल 4151' रहें टिप्पणियां जोड़ना सुनिश्चित करें कि आप चेतावनी को अक्षम क्यों कर रहे हैं। – slimburrok

+3

#pragma .sql फ़ाइलों में काम नहीं करता है। –

0

जाहिर है, वीएस को यह नहीं पता कि यह संग्रहित प्रो केवल एक अन्य संग्रहित प्रो के भीतर से निष्पादित की जा सकती है जो इस अस्थायी तालिका को बनाता है। एक समाधान प्रक्रिया है कि अस्थायी तालिका यदि आवश्यक हो तो

If object_id('tempdb..#MyTemp') Is Null 
    Create Table #MyTemp 
     (
     ... 
     ) 

तो हमेशा माता पिता से कहा जाता है बनाता है, सिद्धांत उपरोक्त कोड कभी नहीं चलाना चाहिए में करने के लिए कोड जोड़ने के लिए किया जाएगा।

8

मेरे पास वही बात थी, जहां माता-पिता इसे बनाता है। तालिका बनाकर चेतावनी से छुटकारा पाने के बजाय यदि यह अस्तित्व में नहीं है, तो मैं अपवाद फेंकने में सक्षम होना चाहता हूं अगर ऐसा नहीं होता है। रिटर्न स्टेटमेंट के बाद एक CREATE स्टेटमेंट डालने की गारंटी है कि यह कभी नहीं चलेगा लेकिन चेतावनी को भी साफ़ कर देगा।

IF (OBJECT_ID('tempdb..#Foo') is null) 
BEGIN 
    Raiserror('#Foo doesn''t exist.', 16, 1) 
    RETURN 
    CREATE TABLE #Foo (foo int) --Here just to get rid of compile warning 
END 
संबंधित मुद्दे