如何在视图中获取查询结果而不是执行查询?
How to get a Query Result in a view rather than a execution of a Query?
我想创建一个带有冗长查询的视图,例如:
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
)
但是当我 Select 来自这个视图的所有元素时,Sql 服务器只在视图内执行查询,这会花费很多时间。
是否可以在 VIEW CREATION 处执行查询?
有什么可以让我用查询结果创建临时 table 吗?
您可以使用
SELECT … INTO NewTableName
FROM …
使用查询结果创建 table(table 将缺少任何键,并且将被更新table)。
您还可以创建一个 "Indexed View":它是视图结果的副本,通常旨在不时更新(例如,昂贵的查询是 运行 每隔分钟来平衡结果的新鲜度和获得它们的成本)。这通常称为 "Materialised View".
参见here:
The result set of a standard view is not stored permanently in the
database. Each time a query references the view, Microsoft® SQL
Server™ 2000 dynamically merges the logic needed to build the view
result set into the logic needed to build the complete query result
set from the data in the base tables. The process of building the view
results is called materializing the view.
因此您需要创建一个 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。
我想创建一个带有冗长查询的视图,例如:
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
)
但是当我 Select 来自这个视图的所有元素时,Sql 服务器只在视图内执行查询,这会花费很多时间。
是否可以在 VIEW CREATION 处执行查询?
有什么可以让我用查询结果创建临时 table 吗?
您可以使用
SELECT … INTO NewTableName
FROM …
使用查询结果创建 table(table 将缺少任何键,并且将被更新table)。
您还可以创建一个 "Indexed View":它是视图结果的副本,通常旨在不时更新(例如,昂贵的查询是 运行 每隔分钟来平衡结果的新鲜度和获得它们的成本)。这通常称为 "Materialised View".
参见here:
The result set of a standard view is not stored permanently in the database. Each time a query references the view, Microsoft® SQL Server™ 2000 dynamically merges the logic needed to build the view result set into the logic needed to build the complete query result set from the data in the base tables. The process of building the view results is called materializing the view.
因此您需要创建一个 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。