Подтвердить что ты не робот

Возможно ли создать временную таблицу в представлении и отбросить ее после выбора?

Мне нужно изменить один вид, и я хочу ввести 2 временных таблицы перед SELECT.

Возможно ли это? И как я могу это сделать?

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 должен быть единственным выражением в пакете.

Как я могу это достичь?

Спасибо

4b9b3361

Ответ 1

Нет, представление состоит из одного оператора 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

Ответ 2

Вы можете добиться того, что вы пытаетесь сделать, используя Stored Procedure, который возвращает результат запроса. View не подходят для таких операций, как этот.