2013-01-31 30 views
28

के साथ @TABLE EXEC @query में इंसर्ट करें क्या यह सच है कि SQL Server 2000, आप exec का उपयोग कर तालिका चर में सम्मिलित नहीं कर सकते हैं?एसक्यूएल सर्वर 2000

मैं इस स्क्रिप्ट की कोशिश की और एक त्रुटि संदेश EXECUTE cannot be used as a source when inserting into a table variable.

declare @tmp TABLE (code varchar(50), mount money) 
DECLARE @q nvarchar(4000) 
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail' 

INSERT INTO @tmp (code, mount) 
EXEC sp_executesql (@q) 

SELECT * from @tmp 

यह सच है, तो मुझे क्या करना चाहिए मिल गया?

+0

अगर यह सच है, तो आप 'बनाना चाहिए अस्थायी TABLE' में चल रहा है (मुझे यकीन है कि आप EXEC से एक अस्थायी तालिका में सम्मिलित कर सकते हूँ)। –

+0

"क्या यह सच है?" - [हां] (http://msdn.microsoft.com/en-us/library/aa260638 (v = sql.80) .aspx) - "हालांकि, तालिका का निम्नलिखित विवरणों में उपयोग नहीं किया जा सकता है: तालिका में INAERT EXVERT EXEC store_procedure " –

+0

ठीक है, मुझे मिल गया, यह @ एंटोन कोवलेंको की तरह है, मुझे अस्थायी तालिका बनाने की जरूरत है, तालिका चर नहीं ... Thx। :) – XMozart

उत्तर

53

N.B. - यह प्रश्न और उत्तर SQL सर्वर के 2000 संस्करण से संबंधित है। बाद के संस्करणों में, INSERT INTO @table_variable ... EXEC ... पर प्रतिबंध हटा दिए गए थे और इसलिए यह उन बाद के संस्करणों के लिए लागू नहीं होता है। documentation से

CREATE TABLE #tmp (code varchar(50), mount money) 
DECLARE @q nvarchar(4000) 
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail' 

INSERT INTO #tmp (code, mount) 
EXEC sp_executesql (@q) 

SELECT * from #tmp 

:


तुम एक अस्थायी तालिका करने के लिए स्विच करना होगा

एक तालिका चर एक स्थानीय चर की तरह व्यवहार करता है। इसमें एक अच्छी तरह से परिभाषित गुंजाइश है, जो फ़ंक्शन, संग्रहीत प्रक्रिया, या बैच जिसमें घोषित किया गया है।

इसके दायरे में, एक तालिका चर नियमित रूप से उपयोग किया जा सकता है। इसे कहीं भी लागू किया जा सकता है, तालिका, तालिका अभिव्यक्ति का चयन SELECT, INSERT, UPDATE, और DELETE कथन में किया जाता है। हालांकि, तालिका निम्नलिखित बयानों में इस्तेमाल नहीं किया जा सकता है:

INSERT INTO table_variable EXEC stored_procedure

SELECT select_list INTO table_variable statements.

+1

@ डेमियन, आपके उदाहरण में टेम्प टेम्प का उपयोग करने का कोई कारण नहीं है, फिर भी आप अपने उदाहरण में एक टेबल चर का उपयोग कर सकते हैं। – GoldBishop

+2

सत्यापित किया गया है कि आप 2008+ – ohmusama

+2

@ohmusama में @tableVariables का उपयोग कर सकते हैं - हाँ, लेकिन प्रश्न '2000' टैग किया गया है और मैंने 2000 दस्तावेज से लिंक किया है कि यह उपलब्ध नहीं है। –

5
DECLARE @q nvarchar(4000) 
SET @q = 'DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY) 
INSERT INTO @tmp 
    (
    code, 
    mount 
) 
SELECT coa_code, 
     amount 
FROM T_Ledger_detail 

SELECT * 
FROM @tmp' 

EXEC sp_executesql @q 

आप गतिशील क्वेरी में चाहते हैं

+0

हाँ, मैं चाहता हूं कि मान गतिशील स्क्रिप्ट से हैं .. और मुझे लगता है कि यह गतिशील नहीं है .. – XMozart

+0

तो उपरोक्त क्वेरी आपको – brykneval

+0

हाँ मदद करेगा यह एक स्थिर निष्पादन है। इसे गतिशील होने के लिए आपको '@ q' चर के असाइनमेंट के भीतर concatenations की आवश्यकता है। अच्छा प्रयास करें लेकिन कोई पासा नहीं। – GoldBishop

9

प्रलेखन भ्रामक है।
मैं निम्नलिखित कोड उत्पादन

DECLARE @table TABLE (UserID varchar(100)) 
DECLARE @sql varchar(1000) 
SET @sql = 'spSelUserIDList' 
/* Will also work 
    SET @sql = 'SELECT UserID FROM UserTable' 
*/ 

INSERT INTO @table 
EXEC(@sql) 

SELECT * FROM @table