2011-11-24 10 views
30

मुझे एक दृश्य बदलने की जरूरत है और मैं चयन से पहले 2 अस्थायी तालिका पेश करना चाहता हूं।क्या एक दृश्य में एक अस्थायी तालिका बनाने और चयन के बाद इसे छोड़ना संभव है?

क्या यह संभव है? और मैं यह कैसे कर सकता हूँ?

ALTER VIEW myView 
AS 

SELECT * 
INTO #temporary1 

SELECT * 
INTO #temporary2 

SELECT * FROM #temporary1 
UNION ALL 
SELECT * FROM #temporary1 

DROP TABLE #temporary1 
DROP TABLE #temporary2 

जब मैं इसका प्रयास करता हूं तो शिकायत करता है कि बैच में वैकल्पिक दृश्य ही एकमात्र कथन होना चाहिए।

मैं इसे कैसे प्राप्त कर सकता हूं?

धन्यवाद

+4

आप प्रत्येक चुनौतीपूर्ण में जाने वाले चुनिंदा बयान क्यों नहीं देते हैं? –

उत्तर

54

नहीं है, एक दृश्य के लिए एक एकल SELECT बयान के होते हैं। आप दृश्य में तालिकाओं को बना या छोड़ नहीं सकते हैं।

शायद common table expression (सीटीई) आपकी समस्या का समाधान कर सकता है। सीटीई अस्थायी परिणाम सेट हैं जिन्हें एकल कथन के निष्पादन दायरे में परिभाषित किया गया है और इन्हें विचारों में उपयोग किया जा सकता है।

उदाहरण (here से लिया गया) - आप एक अस्थायी तालिका के रूप में SalesBySalesPerson CTE के बारे में सोच सकते हैं:

CREATE VIEW vSalesStaffQuickStats 
AS 
    WITH SalesBySalesPerson (SalesPersonID, NumberOfOrders, MostRecentOrderDate) 
     AS 
     (
      SELECT SalesPersonID, COUNT(*), MAX(OrderDate) 
      FROM Sales.SalesOrderHeader 
      GROUP BY SalesPersonID 
    ) 
    SELECT E.EmployeeID, 
     EmployeeOrders = OS.NumberOfOrders, 
     EmployeeLastOrderDate = OS.MostRecentOrderDate, 
     E.ManagerID, 
     ManagerOrders = OM.NumberOfOrders, 
     ManagerLastOrderDate = OM.MostRecentOrderDate 
    FROM HumanResources.Employee AS E 
    INNER JOIN SalesBySalesPerson AS OS ON E.EmployeeID = OS.SalesPersonID 
    LEFT JOIN SalesBySalesPerson AS OM ON E.ManagerID = OM.SalesPersonID 
GO 
0

आप हासिल कर सकते हैं आप एक Stored Procedure जो एक प्रश्न परिणाम देता है का उपयोग कर ऐसा करने के लिए कोशिश कर रहे हैं। View एस इस तरह के संचालन के लिए उपयुक्त नहीं हैं।

+3

चेतावनी दी जानी चाहिए: एक संग्रहीत प्रक्रिया के अंदर एक अस्थायी तालिका बनाने से उस प्रक्रिया को ** पुन: संकलित किया जाएगा ** (स्कीमा में परिवर्तन के बाद से), और डेटा के साथ भरने से ** ** दूसरा पुनर्मूल्यांकन ** हो सकता है (आंकड़े बदलते हैं)। यह एक बहुत अच्छा दृष्टिकोण नहीं है ..... –

+0

मेरा उत्तर यह है कि ऐसे मामलों में विचारों का उपयोग करना ठीक है या नहीं। मैं यहां सबसे अनुकूलित समाधान देने की कोशिश नहीं कर रहा हूं। मेरा उत्तर किसी भी मामले पर एक से अधिक चयन क्वेरी के साथ लागू होता है। –

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

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