我想查看使用临时表的select语句,但是我得到的视图错误可能没有临时表。我该如何解决这个问题?这是我的查询
descripcion
答案 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)
Views
和Functions
可能无法修改数据库中的数据或schema
。因此,要在此容量中使用temp table
,您需要使用stored procedure
。
您可以在table variable
中使用table valued function
,但这可能是不必要的开销。
您可以将temp table
语句切换为CTE
,即使它不会创建temp table
,它也会按您希望的方式整理代码。