반응형
보기에서 임시 테이블을 만들고 선택한 후 삭제할 수 있습니까?
1개의 뷰를 변경해야 하며 SELECT 전에 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
제가 이것을 시도하면 ALTER VIEW가 배치의 유일한 문이어야 한다고 불평합니다.
어떻게 하면 이를 달성할 수 있을까요?
아니요, 보기는 단일 보기로 구성됩니다.SELECT
진술.보기에서 테이블을 만들거나 삭제할 수 없습니다.
일반적인 표식(CTE)으로 문제를 해결할 수 있습니다.CTE는 단일 문의 실행 범위 내에서 정의된 임시 결과 집합이며 뷰에서 사용할 수 있습니다.
예(여기서 발췌) - 당신은 다음을 생각할 수 있습니다.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
성능 고려 사항
CTE와 임시 테이블 중 어느 것이 더 성능이 좋습니까?
당신은 당신이 하려고 하는 것을 성취할 수 있습니다 , 사용합니다.Stored Procedure
쿼리 결과를 반환합니다.Views
이와 같은 작업에는 적합하지 않습니다.
불가능하지만 CTE를 시도하면 다음 코드가 됩니다.
ALTER VIEW [dbo].[VW_PuntosDeControlDeExpediente]
AS
WITH TEMP (RefLocal, IdPuntoControl, Descripcion)
AS
(
SELECT
EX.RefLocal
, PV.IdPuntoControl
, PV.Descripcion
FROM [dbo].[PuntosDeControl] AS PV
INNER JOIN [dbo].[Vertidos] AS VR ON VR.IdVertido = PV.IdVertido
INNER JOIN [dbo].[ExpedientesMF] AS MF ON MF.IdExpedienteMF = VR.IdExpedienteMF
INNER JOIN [dbo].[Expedientes] AS EX ON EX.IdExpediente = MF.IdExpediente
)
SELECT
Q1.[RefLocal]
, [IdPuntoControl] = ( SELECT MAX(IdPuntoControl) FROM TEMP WHERE [RefLocal] = Q1.[RefLocal] AND [Descripcion] = Q1.[Descripcion] )
, Q1.[Descripcion]
FROM TEMP AS Q1
GROUP BY Q1.[RefLocal], Q1.[Descripcion]
GO
임시 테이블 대신 다른 SQL 보기를 만든 다음 기본 SQL 보기에서 참조해 보십시오.즉, 뷰 내의 뷰입니다.그런 다음 기본 보기를 작성한 후 첫 번째 보기를 삭제할 수 있습니다.
언급URL : https://stackoverflow.com/questions/8256466/is-it-possible-to-create-a-temporary-table-in-a-view-and-drop-it-after-select
반응형
'itsource' 카테고리의 다른 글
판다 데이터 프레임의 타임스탬프 열에서 표준시를 제거하는 방법 (0) | 2023.07.31 |
---|---|
목록의 모든 항목과 일치하는 행 그룹 선택 (0) | 2023.07.31 |
Oracle 역할에 부여된 권한 목록을 열거하려면 어떻게 해야 합니까? (0) | 2023.07.31 |
확인란을 선택한 경우 이 작업을 수행합니다. (0) | 2023.07.31 |
페이지에 표시되지 않고 HTML5 비디오 요소를 동적으로 만듭니다. (0) | 2023.07.31 |