2

SQL Server プロデューサーを使用しています。外部キー列ごとにインデックスが必要です。SQL Server は、インデックスを外部キー列に自動的に配置しません。各外部キー列のインデックスを自動的に作成するにはどうすればよいですか? このためにアスペクトをコーディングする必要がありますか?

4

1 に答える 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 に答える