2009-04-03 10 views
5

SQL सर्वर क्यों जोर देता है कि अस्थायी तालिका पहले से मौजूद है! एक या दूसरा होगा !! , तो यह कभी भी मामला नहीं होगा।आईएफ में अस्थायी तालिकाओं का उपयोग .. ईएलएसई कथन

declare @checkvar varchar(10) 
declare @tbl TABLE(colx varchar(10)) 
set @checkvar ='a' 

INSERT INTO @tbl (colx) VALUES('a') 
INSERT INTO @tbl (colx) VALUES('b') 
INSERT INTO @tbl (colx) VALUES('c') 
INSERT INTO @tbl (colx) VALUES('d') 

IF @checkvar is null select colx INTO #temp1 FROM @tbl 
ELSE select colx INTO #temp1 FROM @tbl WHERE colx [email protected] 

त्रुटि है: डेटाबेस में '# temp1' नामक एक ऑब्जेक्ट पहले से ही है।

क्या इसके आसपास एक सुरुचिपूर्ण तरीका है? अगर @checkvar रिक्त है, मैं पूरी तालिका अन्यथा चाहते हैं, मुझे सिर्फ मान देना जहां @checkvar = कुछ

संपादित करें: स्तंभ एक varchar, न कि एक पूर्णांक है।

उत्तर

5

क्या आप सिर्फ कथन को फिर से लिख नहीं सकते?

SELECT colx INTO #temp1 FROM @tbl WHERE (@checkvar IS NULL) OR (colx = @checkVar) 
+0

ठीक से वांछित रिकॉर्ड डालें। मैंने अपना सुझाव –

2
drop table #temp1 

select colx into #temp1 
from @tbl 
where (ISNULL(@checkvar,'0')='0' or [colx] = @checkvar) 

@checkvar मौजूद है, तो यह इस का उपयोग जहां बयान है, और यह सब डेटा देगी होगा। आप '0' को अपनी इच्छानुसार किसी भी चीज़ में बदल सकते हैं, जब तक यह @checkvar का प्रारंभिक मूल्य कभी नहीं होगा।

+0

स्नीकी बदल दिया, आप कथन को 0 = 0 –

+0

में तब तक चालित करते हैं जब तक यह चाल करता है :) – Peter

3

यदि यह एक संग्रहीत प्रक्रिया है, तो चुनें .. INTO प्रक्रिया का एक पुनर्मूल्यांकन करेगा।

जो मैं समझता हूं उससे, प्रक्रिया के शीर्ष में तालिका बनाने के लिए बेहतर होता है, और बाद में सामान्य INSERT करता है।

तो, ईद का सुझाव:

CREATE TABLE #temp1 (colx ...) 

DECLARE @checkvar VARCHAR(10) 
DECLARE @tbl TABLE(colx varchar(10)) 
SET @checkvar ='a' 

INSERT INTO @tbl (colx) VALUES('a') 
INSERT INTO @tbl (colx) VALUES('b') 
INSERT INTO @tbl (colx) VALUES('c') 
INSERT INTO @tbl (colx) VALUES('d') 

IF @checkvar IS NULL 
BEGIN 
    INSERT INTO #temp1(colx) 
    SELECT colx 
    FROM @tbl 
END 
ELSE 
BEGIN 
    INSERT INTO #temp1(colx) 
    SELECT colx 
    FROM @tbl WHERE colx [email protected] 
END 

इसके अलावा, इस तरह से आप से छुटकारा या अन्य समाधान ने उल्लेख मिलता है (या की बुराई कर रहे हैं;)

/बी

6

आप बना सकते हैं एक WHERE 1=0 का उपयोग करके वांछित संरचना के साथ खाली अस्थायी तालिका। फिर वांछित रिकॉर्ड अपने मूल कोड

SELECT colx INTO #temp1 
FROM @tbl 
WHERE 1 = 0 // this is never true 

IF @checkvar IS NULL 
BEGIN 
    INSERT INTO #temp1 (colName) 
    SELECT colx FROM @tbl 
END 
ELSE 
BEGIN 
    INSERT INTO #temp1 (colName) 
    SELECT colx 
    FROM @tbl 
    WHERE colx = @checkvar 
END 
संबंधित मुद्दे