如何在视图中获取查询结果而不是执行查询?

时间:2015-07-07 08:16:00

标签: sql sql-server create-view

我想创建一个带有长度查询的视图,如:

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

执行查询

是否允许我使用查询结果制作临时表?

2 个答案:

答案 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。