スクリプト インデックスのデフォルトは 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
データベースを右クリックし、[タスク] > [スクリプトの生成...] で 2 つのビューとテーブルを選択し、新しいクエリ ウィンドウにスクリプトを作成しました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]
ところ、スクリプトは正常に実行されました (そして、明らかに正しい順序になっています)。
したがって、スクリプトを別の方法で生成しているか、「エラー時にスクリプトを続行する」オプションを使用していて、ビューがインデックスの作成を妨げています。