在视图中选择into语句

时间:2016-06-22 16:54:25

标签: sql sql-server ssms-2014

我想查看使用临时表的select语句,但是我得到的视图错误可能没有临时表。我该如何解决这个问题?这是我的查询

descripcion

3 个答案:

答案 0 :(得分:2)

创建视图时无法使用临时表。您可以尝试使用common-table-expression代替。不是100%肯定与cross apply一起使用它会起作用。如果没有,另一种选择是将临时表移动到内联子查询。

这是一个CTE:

CREATE VIEW vwTopStackedItems
AS
WITH CTE AS (
    SELECT COUNT(INVENTORY.itemID) as Stacks, (ITEM.itemID), CHARACTERS.charName      
    FROM INVENTORY
    INNER JOIN ITEM
    ON INVENTORY.itemID = ITEM.itemID
    JOIN CHARACTERS
    ON INVENTORY.charID = CHARACTERS.charID
    WHERE INVENTORY.quantity>1
    GROUP BY CHARACTERS.charName, ITEM.itemID 
)
SELECT [ITEMID], 
   LEFT(column_names , LEN(column_names )-1) AS column_names, 
   SUM([Stacks]) total_stacks
FROM CTE AS extern
CROSS APPLY
(
   SELECT [charName] + ','
   FROM CTE intern
   WHERE intern.[ITEMID] = extern.[ITEMID]
   FOR XML PATH('')
) pre_trimmed (column_names)
GROUP BY [ITEMID], column_names;
GO

答案 1 :(得分:1)

视图由单个SELECT语句组成。您无法在视图中创建或删除表。

如果您需要执行类似的操作,请尝试使用存储过程。

答案 2 :(得分:0)

ViewsFunctions可能无法修改数据库中的数据或schema。因此,要在此容量中使用temp table,您需要使用stored procedure

您可以在table variable中使用table valued function,但这可能是不必要的开销。

您可以将temp table语句切换为CTE,即使它不会创建temp table,它也会按您希望的方式整理代码。