インデックスに正しい2つの列が定義されているかどうかを確認するDBアップグレードスクリプトを作成しています。そうでない場合、または1つしかない場合は、ドロップして(インデックスを変更する方法はありますか?)、両方を使用して再作成します。
skbergam
質問する
3768 次
2 に答える
7
これをテストするためのデータベースは手元にありませんが、次の IF EXISTS ステートメントを使用して、インデックスに列が存在するかどうかを確認できるはずです。
その場でインデックスを変更できるかどうかはわかりません。
IF EXISTS
(
SELECT MyIndex.Name AS IndexName,
Columns.name AS ColumnName
FROM sys.indexes MyIndex
INNER JOIN sys.index_columns IndexColumns
ON MyIndex.index_id = IndexColumns.index_id
AND MyIndex.object_id = IndexColumns.object_id
INNER JOIN sys.columns Columns
ON Columns.column_id = IndexColumns.column_id
AND IndexColumns.object_id = Columns.object_id
WHERE Columns.name = 'ColumnName'
AND MyIndex.Name='IX_MyIndexName'
)
于 2008-10-23T16:35:34.147 に答える
4
助けてくれてありがとう、エド。これが私があなたを出発点として使って書いた解決策です。確認済みです。基本的に、すべての正しい結合があります。
IF EXISTS
(
SELECT i.Name AS IndexName, c.Name AS ColumnName
FROM sys.indexes i
JOIN sys.index_columns ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
JOIN sys.columns c
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE c.Name = 'MyColumnName' AND i.Name='MyIndexName'
)
于 2008-10-23T17:11:06.743 に答える