脚本索引的默认值为 False。您需要将其更改为 true 才能将 包含在CREATE INDEX
您的视图中。在管理工作室中:
- 工具 > 选项
- SQL Server 对象资源管理器
- 脚本
- 表和视图选项 > 脚本索引
将选项设置为 True,单击 OK,然后再次尝试生成脚本。
编辑
在默认安装中,上述设置是我唯一更改的内容。我生成了以下架构:
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
我右键单击数据库,Tasks > Generate Scripts... 选择了两个视图和表,脚本化到一个新的查询窗口,这就是它产生的(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]
为不同的数据库时,脚本执行得很好(显然事情的顺序是正确的)。
因此,要么您以不同的方式生成脚本,要么您使用了“错误时继续编写脚本”选项,而您的视图会阻止创建索引。