मुझे TSQL में CTE (Common Table Expression) का उपयोग करके एक गतिशील SQL वापस करने की आवश्यकता है, नीचे मेरा प्रयास काम नहीं करता है:

नोट: नीचे दी गई क्वेरी एक लिंक किए गए सर्वर का उपयोग करती है, लेकिन मेरा प्रश्न किसी भी SQL से संबंधित है, यहां तक ​​​​कि openquery कमांड का उपयोग नहीं कर रहा है।

declare @sql nvarchar(max) = N'SELECT * FROM OPENQUERY(DATABASE1, ''SELECT * FROM tblRequisitions'')'

;WITH requisitions AS
(
   EXEC (@sql)
)
SELECT * from requisitions

मैं इस गतिशील SQL को अपने CTE में लोड करने के लिए कैसे बना सकता हूं?

1
Roger Oliveira 4 सितंबर 2017, 05:30
1
मुझे नहीं लगता कि आप कर सकते हैं। आप एसक्यूएल को कुछ चुनने और एक ही समय में कुछ निष्पादित करने के लिए कह रहे हैं। हो सकता है कि अपनी क्वेरी को एक अस्थायी तालिका में निष्पादित करें, फिर अस्थायी तालिका से चयन करें
 – 
Greg
4 सितंबर 2017, 05:34

1 उत्तर

सबसे बढ़िया उत्तर

आप गतिशील एसक्यूएल को नियमित एसक्यूएल में शामिल नहीं कर सकते हैं। आप क्या कर सकते हैं एक अस्थायी तालिका बनाएं, गतिशील आउटपुट को अस्थायी तालिका में डालें और फिर सीटीई में अस्थायी तालिका का संदर्भ लें। इन पंक्तियों के साथ कुछ ...

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
DROP TABLE #temp;

CREATE TABLE #temp (
    -- ColumnName DataType
    );
INSERT #temp (ColumnName)
EXEC (@sql);

WITH
    cte_requisitions AS (
        SELECT 
            *
        FROM 
            #temp t
        )
SELECT 
    *
FROM 
    cte_requisitions r;
3
Jason A. Long 4 सितंबर 2017, 05:37
यह एक अच्छा समाधान दिखता है, मैंने इसे किया, लेकिन जब मैं क्वेरी चलाता हूं तो यह "कमांड सफलतापूर्वक पूर्ण हुआ" प्रदर्शित करता है लेकिन यह कुछ भी वापस नहीं करता है: /। कोई विचार?
 – 
Roger Oliveira
4 सितंबर 2017, 05:56
1
क्या अस्थायी तालिका परिभाषा गतिशील एसक्यूएल के आउटपुट से बिल्कुल मेल खाती है?
 – 
Jason A. Long
4 सितंबर 2017, 06:05
1
ओह, मुझे समस्या मिली, कुछ और था, क्षमा करें, और आपकी अद्भुत मदद के लिए धन्यवाद, मैं आपका उत्तर सही के रूप में सेट कर दूंगा।
 – 
Roger Oliveira
4 सितंबर 2017, 06:10
1
अच्छा सौदा, मुझे खुशी है कि आपने इसे चुकता कर काम किया। खुशी है कि मैं सहायता कर सका। :)
 – 
Jason A. Long
4 सितंबर 2017, 06:12