我需要改变一个视图,我想在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
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,它抱怨ALTER VIEW必须是批处理中唯一的语句.
我怎样才能做到这一点?
Mar*_*icz 79
不,视图由单个SELECT语句组成.您无法在视图中创建或删除表.
也许公用表表达式(CTE)可以解决您的问题.CTE是在单个语句的执行范围内定义的临时结果集,可以在视图中使用它们.
示例(取自此处) - 您可以将SalesBySalesPersonCTE视为临时表:
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
Run Code Online (Sandbox Code Playgroud)
Stored Procedure您可以使用返回查询结果的方法来实现您想要做的事情。Views不适合/不适合这样的操作。