SQL Server プロデューサーを使用しています。外部キー列ごとにインデックスが必要です。SQL Server は、インデックスを外部キー列に自動的に配置しません。各外部キー列のインデックスを自動的に作成するにはどうすればよいですか? このためにアスペクトをコーディングする必要がありますか?
1 に答える
1
CodeFluent Entities はデフォルトではインデックスを生成しません。index="true"
ただし、プロパティで設定できます。
<cf:property name="Customer" index="true" />
そしてSQL Server Template Engine
、CodeFluent Entities が提供する および テンプレートを使用して、"C:\Program Files (x86)\SoftFluent\CodeFluent\Modeler\Templates\SqlServer\[Template]CreateIndexes.sql"
インデックスを作成します。
各プロパティを追加したくない場合はindex=true
、テンプレートを変更してすべてのプロパティを自動的に含めるか、アスペクトを記述して属性を追加できます (これはより複雑です)。
もう 1 つの解決策は、SQL スクリプトを使用することです。
DECLARE @SQL NVARCHAR(max)
SET @SQL = ''
SELECT @SQL = @SQL +
'IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''[dbo].[' + tab.name + ']'') AND name = N''IX_' + cols.name + ''')' + CHAR(13)+CHAR(10) +
'CREATE NONCLUSTERED INDEX [IX_' + cols.name + '] ON [dbo].[' + tab.name + ']( [' + cols.name + '] ASC ) ON [PRIMARY];' + CHAR(13)+CHAR(10)
FROM sys.foreign_keys keys
INNER JOIN sys.foreign_key_columns keyCols ON keys.object_id = keyCols.constraint_object_id
INNER JOIN sys.columns cols ON keyCols.parent_object_id = cols.object_id AND keyCols.parent_column_id = cols.column_id
INNER JOIN sys.tables tab ON keyCols.parent_object_id = tab.object_id
ORDER BY tab.name, cols.name
EXEC(@SQL)
于 2015-11-27T14:12:49.527 に答える