2013-08-20 8 views
16

के मेटाडेटा लाने के इच्छुक नहीं है, मेरे पास एक एसएसआईएस पैकेज है, जिसमें एकाधिक प्रवाह होते हैं।एसएसआईएस पैकेज अस्थायी तालिका

प्रत्येक प्रवाह "स्टेजिंग" टेबल बनाने के लिए ज़िम्मेदार है, जो सृजन के बाद भर जाता है। ये सारणी वैश्विक अस्थायी सारणी हैं।

मैंने 1 अतिरिक्त प्रवाह जोड़ा (मैंने पैकेज नहीं बनाया) जो कि जैसा कि ऊपर बताया गया है, एक और तालिका के लिए। हालांकि, किसी कारण से, पैकेज इस प्रवाह पर अंतःक्रियात्मक रूप से विफल रहता है, जबकि यह कुछ तालिका नामों के अलावा अन्य के समान ही होता है।

त्रुटि है कि ऊपर पॉपिंग रहता है:

Update - Insert Data Flow:Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Unspecified error". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The metadata could not be determined because statement 'select * from '##TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1'' uses a temp table.".

निर्माण अभिव्यक्ति:

"CREATE TABLE " + @[User::TmpMcsConfigurationDeviceHistory] + " ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL) 

"

पार्स अभिव्यक्ति (= मूल्यांकित):

CREATE TABLE ##TmpMcsConfigurationDeviceHistory764E56F088DC475C9CC747CC82B9E388 ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL) 

उत्तर

0

मुझे पता चला कि समस्या एक GUID डुप्लिकेट समस्या में झूठ बोला है, मैंने तत्वों की प्रतिलिपि बनाई है (जैसे टेम्पलेट टेबल बनाने के लिए) और उन्हें कॉपी करने पर एक ही guid प्राप्त हुआ। मैंने अपने पैकेज में इन सभी guids को रीसेट करने के लिए एक टूल का उपयोग किया और इससे मेरी समस्या हल हो गई।

धन्यवाद!

8

आप कर रहे हैं एसएसआईएस 2012 पर काम कर रहा है , तो यह तालिका संग्रहीत प्रक्रिया sp_describe_first_result_set तालिकाओं के मेटाडेटा लाने के लिए उपयोग करता है और यह अस्थायी तालिकाओं का समर्थन नहीं करता है। लेकिन आप टेबल वैरिएबल और सीटीई जैसे अन्य विकल्पों के लिए जा सकते हैं जो ठीक काम करने जा रहे हैं। https://connect.microsoft.com/SQLServer/feedback/details/629077/denali-engine-metadata-discovery-shuns-temp-tables

+1

मैं अपने डेटा में तालिका चर का उपयोग बहती है (यह मेरा पहला दिन लघु उद्योगों का उपयोग कर तो मैं मुझे आशा है कि है मैं सही हूँ), वे temp तालिका बनाने के लिए सिर्फ डीडीएल रखते हैं, जैसे अन्य सभी डेटा प्रवाह (जबकि यह अन्य डेटा प्रवाह में काम करता है)। – Mortana

+1

जैसा कि मैं इसे आपके त्रुटि विवरण में देख सकता हूं, अस्थायी क्वेरी टेम्पल तालिका के विरुद्ध चल रही है जो बदले में मेटा डेटा मांगेगी। * ## TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1 ' – Sonam

+0

से चुनें * कृपया इस डेटा प्रवाह के माध्यम से जाएं और पुष्टि करें कि ऊपर उल्लिखित क्वेरी चल रही है या नहीं। – Sonam

13

एक और विकल्प (एक हैक की तरह, लेकिन यह काम करता है और आपको वैश्विक अस्थायी तालिकाओं के उपयोग को बदलने की आवश्यकता नहीं है) एक नकली भेजने के लिए अपनी वास्तविक क्वेरी के सामने एक सेट FMTONLY ON कमांड का उपयोग करना है " पहला परिणाम "एसएसआईएस को अपनी सही कॉलम संरचना के साथ सेट करें। तो अगर आप की तरह कुछ कर सकते हैं

SET FMTONLY ON 
select 0 as a, 1 as b, 'test' as C, GETDATE() as D 
SET FMTONLY OFF 

select a, b, c, d from ##TempTable 

जब लघु उद्योगों sp_describe_first_result_set चलाता है, यह आपके FMTONLY आदेश के मेटाडाटा और स्तंभ नाम वापस आ जाएगी, और अपने अस्थायी तालिका के मेटाडाटा को निर्धारित करने में सक्षम नहीं होने के बारे में शिकायत नहीं कर सकते क्योंकि यह कोशिश भी नहीं करेंगे।

+0

धन्यवाद, मैं एक ऐसे स्थान पर था जहां एक अस्थायी तालिका का उपयोग करके एक ट्रिगर था और मैं ट्रिगर को स्पर्श नहीं कर सका (पूछो मत) ... यह मुझे – Rikon

+0

की आवश्यकता थी, जो डेढ़ साल बाद और अभी भी सहायक था। धन्यवाद केली। –

+0

यह काम किया। मुझे इसे काम करने के लिए कुछ और कदम उठाने पड़ते थे। मेरी क्वेरी में 40+ फ़ील्ड थे, उनमें से कुछ बड़े, कुछ दशमलव (1 9, 4) थे। एफएमटीटीआई के अंदर नकली चयन में मुझे कई बार सीएएसटी (नल एएस डेसीमल (1 9, 4)) जैसे माईडेसीमलफिल्ड के रूप में लिखना पड़ा। –

-1

जेमी थॉमसन ने कुछ समय पहले इस परिदृश्य के बारे में ब्लॉग किया था। यह अभी भी काम करना चाहिए (2012 में): http://consultingblogs.emc.com/jamiethomson/archive/2006/11/19/SSIS_3A00_-Using-temporary-tables.aspx

+0

यह एक अलग समस्या है, में सम्बन्ध। इस सवाल में समस्या यह है कि कैसे एसएसआईएस 2012 कमांड एसक्यूएल या एसक्यूएल के साथ संग्रहीत प्रोसेस को अस्वीकार करता है जो अस्थायी तालिकाओं का उपयोग करते हैं। –

0

वही समस्या थी जब हम स्टेजिंग के लिए temp तालिका का उपयोग करते थे। कुछ समय बिताने के बाद, एक काम मिल गया।

ओएलई डीबी/एडीओ डेटा प्रवाह कार्य का गंतव्य जहां आप स्टेजिंग तालिका का नाम निर्दिष्ट करते हैं।

AccessMode प्रॉपर्टी को OpenRowSet के बजाय SQL कमांड में बदलें और "temp से * चुनें "में SQL कमांड प्रॉपर्टी निर्दिष्ट करें।

Hurray, यह अपेक्षा के अनुसार काम कर रहा है।

यहां पकड़ें जब आप SQL कमांड के अलावा एक्सेस मोड निर्दिष्ट करते हैं, तो एसएसआईएस उम्मीद करता है कि एक टेबल/व्यू होना चाहिए और मेटा डेटा प्राप्त करने के लिए एसएसआईएस को sp_describe_first_result_set पर कॉल करने के लिए बदल दिया गया है। लेकिन जब आप SQL कमांड निर्दिष्ट करते हैं, तो यह एक क्वेरी या एसपी कमांड इत्यादि की अपेक्षा करता है। सौभाग्य से यह अभी भी मेटा डेटा प्राप्त करने के पुराने तरीके का उपयोग करता है।

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfe1c7c1-910a-4f52-9718-c3406263b177/usage-of-temp-tables-in-ssis-2012?forum=sqlintegrationservices#cfe1c7c1-910a-4f52-9718-c3406263b177

20

Using WITH RESULT SETS to explicitly define the metadata लघु उद्योगों sp_describe_first_result_set कदम को छोड़ और मेटाडाटा आपके द्वारा निर्धारित का उपयोग करने की अनुमति देगा। उलझन यह है कि आप एसएसआईएस को एसक्यूएल निष्पादित करने के लिए इसका उपयोग कर सकते हैं जिसमें एक अस्थायी तालिका है (मेरे लिए, उस प्रदर्शन ने बहुत मदद की है); नकारात्मकता यह है कि, यदि कुछ भी बदलता है तो आपको इसे मैन्युअल रूप से बनाए रखना और अपडेट करना होगा।

क्वेरी नमूना (संग्रहीत प्रक्रिया :)

EXEC ('dbo.MyStoredProcedure') 
    WITH RESULT SETS 
     (
     (
      MyIntegerColumn INT NOT NULL, 
      MyTextColumn VARCHAR(50) NULL, 
      MyOtherColumn BIT NULL 
     ) 
    ) 

क्वेरी नमूना (सरल एसक्यूएल :)

EXEC (' 
    CREATE TABLE #a 
     (
     Col INT 
    ) 
    INSERT INTO #a 
     (
     COL 
    ) 
    SELECT 1 AS Col 

    SELECT Col 
    FROM #a') 
WITH RESULT SETS ((Col INT NOT NULL)) 
) 
+2

यह वह उत्तर है जो मेरे लिए काम करता है। एफएमटीटीली कमांड के साथ उपर्युक्त उत्तर वास्तविक ईटीएल के दौरान आउटपुट में 0 पंक्तियां भेजना समाप्त कर दिया। – efesar

+0

धन्यवाद - यह वास्तव में एक उपयोगी समाधान था जिसे मैंने अभी ठोकर दिया था। – MISNole

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