2013-08-19 8 views
27

मैं है एसक्यूएल सर्वर में निम्न समस्या, मैं कुछ कोड है कि इस तरह दिखता है 'वहां पहले से ही एक वस्तु का नाम दिया है':अस्थायी तालिका के कारण त्रुटि

DROP TABLE #TMPGUARDIAN 
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30), 
FRST_NAME NVARCHAR(30)) 

SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE 

जब मैं यह कर मैं एक मिल त्रुटि 'डेटाबेस में' #TMPGUARDIAN 'नामक एक वस्तु पहले से ही है। क्या कोई मुझे बता सकता है कि मुझे यह त्रुटि क्यों मिल रही है?

उत्तर

51

आप इसे छोड़ रहे हैं, फिर इसे बना रहे हैं, फिर SELECT INTO का उपयोग करके इसे फिर से बनाने का प्रयास कर रहे हैं। करने के लिए परिवर्तित करें:

DROP TABLE #TMPGUARDIAN 
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30), 
FRST_NAME NVARCHAR(30)) 

INSERT INTO #TMPGUARDIAN 
SELECT LAST_NAME,FRST_NAME 
FROM TBL_PEOPLE 

एमएस एसक्यूएल सर्वर में आप SELECT INTO

5

का उपयोग करके एक CREATE TABLE बयान के बिना एक तालिका बनाने सकें, आपको इस

CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30), 
FRST_NAME NVARCHAR(30)) 

INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME) 
SELECT LAST_NAME,FRST_NAME FROM TBL_PEOPLE 

जैसी क्वेरी संशोधित करना होगा - एक अंतिम सत्र बनाओ सभी अस्थायी तालिकाओं को साफ़ करने के लिए। हमेशा अंत में छोड़ दें। आपके मामले में, कभी-कभी, यदि कोई फ़ाइल मौजूद नहीं है, तो तालिका में मौजूद होने पर कोई त्रुटि हो सकती है।

DROP TABLE #TMPGUARDIAN 

बचें में डालने का उपयोग कर क्योंकि आप में डालने का उपयोग कर रहे हैं तो भविष्य में यदि आप कोई नया स्तंभ जो कुछ प्रक्रिया के बाद भरा जा सकता है (डालने के साथ-साथ नहीं) जोड़कर अस्थायी तालिका संशोधित करना चाहते हैं । उस समय, आपको इसे उसी तरह से फिर से तैयार करने और डिजाइन करने की आवश्यकता है।

उपयोग तालिका चर http://odetocode.com/articles/365.aspx

declare @userData TABLE(
LAST_NAME NVARCHAR(30), 
    FRST_NAME NVARCHAR(30) 
) 

लाभ ड्रॉप बयानों के लिए कोई ज़रूरत नहीं है, क्योंकि यह चर के समान हो जाएगा। निष्पादन के तुरंत बाद दायरा समाप्त होता है।

21

मैं आमतौर पर इन लाइनों को मेरी संग्रहीत प्रक्रिया की शुरुआत में रखता हूं, और फिर अंत में।

यह #temp टेबल के लिए "मौजूद" चेक है।

IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL 
begin 
     drop table #MyCoolTempTable 
end 
+1

मेरे मामले में ऐसा लगता है कि यह पर्याप्त नहीं है। केवल तथ्य यह है कि मैं दो बार लिखता हूं वही चयन करता हूं "संकलन त्रुटि का कारण बनने के लिए" MyField INTO #TempTable "चुनें। दोनों में चयन एक ही समय में नहीं मारा जा सकता है क्योंकि वे तब भी ईएलएसई की अलग-अलग शाखाओं में हैं: फिर भी, मैं –

+0

में एक ही चयन में दो बार नहीं लिख सकता चयन-इन का उपयोग न करें। यह एक "शॉर्ट कट" है। #tempTable बनाएं, "MyTemp में सम्मिलित करें Col1, Col2 से dbo.MyTable" वाक्यविन्यास का उपयोग करें। – granadaCoder

3

कभी-कभी आप एक ही sql फ़ाइल पर डालने क्वेरी लेखन (समान कार्यस्थल/टैब में) की तरह मूर्खतापूर्ण गलती करते हैं हो सकता है तो आप एक बार डालने क्वेरी जहाँ आपके बनाने क्वेरी बस ऊपर और पहले से ही लिखा गया था निष्पादित निष्पादित , यह फिर से सम्मिलित क्वेरी के साथ निष्पादन शुरू कर देगा।

यही कारण है कि हम ऑब्जेक्ट का नाम (टेबल नाम) पहले से मौजूद हैं, क्योंकि यह दूसरी बार निष्पादित हो रहा है।

तो डालने या ड्रॉप या जो भी प्रश्न आप निष्पादित करने वाले हैं, लिखने के लिए एक अलग टैब पर जाएं।

वरना टिप्पणी उपयोग लाइनों की तरह

CREATE -- … 
-- Insert query 
INSERT INTO -- … 
0

समान कार्यस्थल में सभी प्रश्नों पूर्ववर्ती ओपी टेबल, अगर प्रश्न में वस्तु है एक संग्रहीत प्रक्रिया, सुनिश्चित करें कि आप का उपयोग चर्चा कर रहा था जबकि " को बदल "कार्य:

ALTER प्रक्रिया

आप में कोड पेस्ट, यो अगर आपको "परिवर्तन" के साथ "निर्माण" को प्रतिस्थापित करने की आवश्यकता हो सकती है ... यह मेरे साथ हुआ और निराशाजनक है, इसलिए मुझे उम्मीद है कि यह किसी और को होता है।

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