默认为脚本的索引是假。您需要将其更改为true,以便将CREATE INDEX
包含在您的视图中。在Management Studio中:
- 工具>选项
- 的SQL Server对象资源管理器
- 脚本
- 表和视图选项>脚本指标
设置选项设置为True,单击确定,尝试再次生成脚本。
编辑
在默认安装的,上面的设置是我改的嘛。我产生以下模式:
CREATE TABLE dbo.x(i INT);
GO
ALTER VIEW dbo.v_x
WITH SCHEMABINDING
AS
SELECT i, c = COUNT_BIG(*)
FROM dbo.x
GROUP BY i;
GO
CREATE UNIQUE CLUSTERED INDEX i ON dbo.v_x(i);
GO
CREATE VIEW dbo.v_y
AS
SELECT i,c FROM dbo.v_x WITH (NOEXPAND);
GO
我右键单击的数据库,任务>生成脚本...挑两个视图和表,脚本到一个新的查询窗口,这是它生产的(我删除了所有SET
选项简洁,不是因为他们不存在或不重要):
USE [foo]
GO
/****** Object: Table [dbo].[x] Script Date: 06/20/2012 08:03:59 ******/
CREATE TABLE [dbo].[x](
[i] [int] NULL
) ON [PRIMARY]
GO
/****** Object: View [dbo].[v_x] Script Date: 06/20/2012 08:04:00 ******/
CREATE VIEW [dbo].[v_x]
WITH SCHEMABINDING
AS
SELECT i, c = COUNT_BIG(*)
FROM dbo.x
GROUP BY i;
GO
CREATE UNIQUE CLUSTERED INDEX [i] ON [dbo].[v_x]
(
[i] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object: View [dbo].[v_y] Script Date: 06/20/2012 08:04:00 ******/
CREATE VIEW [dbo].[v_y]
AS
SELECT i,c FROM dbo.v_x WITH (NOEXPAND);
GO
当我改变了USE [foo]
到不同的数据库,脚本执行就好了(显然事情是正确的顺序)。
因此,无论您是以不同方式生成脚本,还是使用了“错误时继续脚本”选项,并且您的视图都会阻止创建索引。
我测试这个方法。但SSMS会在创建所有视图的脚本之后创建索引视图的集群索引。如果一个索引视图在没有展开提示的另一个视图上使用,当运行创建的数据库脚本时,我们会面临错误,您不能使用noexpand提示。 –
这就是整个脚本中的* only *错误?恐怕你将不得不张贴脚本和你用来获取它的方法。我无法复制(更新我的答案以反映这一点)。 –