2013-03-22 7 views
23

में खंड के साथ उपयोग करके मैं सोच रहा था कि यह संभव था या नहीं। (बड़े पैमाने पर सरलीकृत)एसक्यूएल सर्वर - एक INSERT कथन

;WITH alias (y,z) 
AS 
(
    SELECT y,z FROM tableb 
) 
SELECT y, z FROM alias 

मैं अब एक और तालिका में इस क्वेरी के परिणामों INSERT करना चाहते हैं: मैं एक SELECT क्वेरी इसलिए की तरह करने के लिए कुछ एकत्रित डेटा लागू करने के लिए WITH खंड का उपयोग करता है तो मौजूदा क्वेरी की है।

मैं निम्नलिखित की कोशिश की है:

INSERT INTO tablea(a,b) 
;WITH alias (y,z) 
AS 
(
    SELECT y,z FROM tableb 
) 
SELECT y, z FROM alias 

लेकिन मैं त्रुटि मिलती है:

Incorrect syntax near ';'.

तो मैं अर्धविराम के बिना की कोशिश की है, लेकिन त्रुटि मिली:

Incorrect syntax near the keyword 'WITH'.

Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

है मैं अलग-अलग वाक्यविन्यास के साथ क्या करने की कोशिश कर रहा हूं?

+0

अर्धविराम एक बयान के ** अंत ** पर जाता है। इसे मोर्चे पर रखना एक बुरी आदत है और आपको अर्धविराम के साथ प्रत्येक कथन को ठीक से समाप्त करने के लिए उपयोग किया जाना चाहिए। –

+0

क्या आपने 'INSERT' कथन के लिए [प्रलेखन] (http://msdn.microsoft.com/en-us/library/ms174335 (v = sql.110) .aspx) देखा था? यह दिखाता है कि सीटीई 'INSERT' से पहले आता है, और इसमें सीटीई का उपयोग करने का एक उदाहरण शामिल है। – Pondlife

उत्तर

44

आपको CTE के ठीक बाद INSERT INTO रखना होगा। तो कोड होगा:

;WITH alias (y,z) 
AS 
(
    SELECT y,z FROM tableb 
) 
INSERT INTO tablea(a,b) 
SELECT y, z 
FROM alias 

SQL Fiddle with Demo

0

एक और तरीका है एक CTE का उपयोग किए बिना

INSERT INTO tablea(a,b) 
SELECT y, z 
FROM 
(
    SELECT y,z FROM tableb 
) alias 
+0

एकल चयन क्यों कर सकता है जब बाहरी चयन कर सकते हैं? –

+0

@KSTech अच्छा सवाल है। मैं सोच रहा था कि ओपी सिर्फ समस्या को हल कर रहा था। –

0

अर्द्धविराम बयान समाप्त करने के लिए प्रयोग किया जाता है, एक सबक्वेरी में यह लपेटकर कर रहा है। तो जब आप इसका उपयोग करते हैं, तो, पिछले कथन को समाप्त करता है। हालांकि, यही कारण है कि आपको यहां त्रुटि क्यों मिल रही है। यहां समस्या आपके INSERT INTO कथन के साथ है, जो VALUES या SELECT वाक्यविन्यास की तलाश में है।

INSERT INTO कथन का उपयोग 2 तरीकों से किया जा सकता है - स्पष्ट रूप से VALUES प्रदान करके या चयन कथन का उपयोग करके परिणाम सेट प्रदान करके।

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