我想创建一个带有长度查询的视图,如:
CREATE VIEW doubleV
AS
SELECT * FROM X1 as R
WHERE [Ext] IN
(
SELECT [Ext] FROM X1 as RR
WHERE RR.cliID=R.cliID
AND Soc='j'
GROUP BY [Ext]
HAVING COUNT(*) > 1
)
但是当我从这个VIEW中选择所有元素时,Sql server只是在视图中执行查询,这需要很长时间。
是否可以在 VIEW CREATION ?
执行查询是否允许我使用查询结果制作临时表?
答案 0 :(得分:0)
您可以使用
SELECT … INTO NewTableName
FROM …
创建一个包含查询结果的表(该表将缺少任何键,并且可以更新)。
您还可以创建"Indexed View":这是视图结果的副本,通常用于不时更新(例如,每隔几分钟运行一次昂贵的查询以平衡新鲜度获得成本的结果)。这通常被称为“物化视图”。
答案 1 :(得分:0)
请参阅here:
标准视图的结果集不会永久存储在 数据库。每次查询引用视图时,Microsoft®SQL Server™2000动态合并构建视图所需的逻辑 结果集成构建完整查询结果所需的逻辑 从基表中的数据设置。构建视图的过程 结果称为实现视图。
所以你需要创建一个INDEXED VIEW,为了做到这一点,你可以阅读this。
您需要的代码如下(可能是一些拼写错误):
CREATE VIEW doubleV
AS
SELECT * FROM X1 as R
WHERE [Ext] IN
(
SELECT [Ext] FROM X1 as RR
WHERE RR.cliID=R.cliID
AND Soc='j'
GROUP BY [Ext]
HAVING COUNT(*) > 1
)
GO
CREATE UNIQUE CLUSTERED INDEX doubleVInd ON doubleV (field_you_want)
其中field_you_want是您索引的字段,很可能是ID。