web-dev-qa-db-ja.com

SQL Server 2008でフルテキストインデックスを検索する

特定のデータベースでFULLTEXT INDEXが適用されているテーブルのリストを見つけるにはどうすればよいですか?

たとえば、次のようにFULLTEXT INDEXを有効または無効にできます。

ALTER FULLTEXT INDEX ON [dbo].[OBJECT_FACT] ENABLE

ALTER FULLTEXT INDEX ON [dbo].[OBJECT_FACT] DISABLE
4
MacGyver

FULLTEXT INDEXのあるテーブルのリストを見つけるには:

SELECT
    SCHEMA_NAME(t.schema_id) AS SchemaName,
    t.name AS TableName, 
    c.name AS FTCatalogName ,
    f.name AS FileGroupName,
    i.name AS UniqueIdxName,
    cl.name AS ColumnName
FROM 
    sys.tables t 
INNER JOIN 
    sys.fulltext_indexes fi 
ON 
    t.[object_id] = fi.[object_id] 
INNER JOIN 
    sys.fulltext_index_columns ic
ON 
    ic.[object_id] = t.[object_id]
INNER JOIN
    sys.columns cl
ON 
    ic.column_id = cl.column_id
    AND ic.[object_id] = cl.[object_id]
INNER JOIN 
    sys.fulltext_catalogs c 
ON 
    fi.fulltext_catalog_id = c.fulltext_catalog_id
INNER JOIN 
    sys.filegroups f
ON
    fi.data_space_id = f.data_space_id
INNER JOIN 
    sys.indexes i
ON 
    fi.unique_index_id = i.index_id
    AND fi.[object_id] = i.[object_id];

FULLTEXT INDEXを有効または無効にするには、参照 msdn

sp_fulltext_table 
   [ @tabname= ] 'qualified_table_name'         
   , [ @action= ] 'action' 
   [ 
   , [ @ftcat= ] 'fulltext_catalog_name'         
   , [ @keyname= ] 'unique_index_name' 
   ]

推奨される方法は、非推奨のALTER FULLTEXT INDEX [myFTindex] {ENABLE/DISABLE}の代わりにsp_fulltext_tableを使用することです。

10
kumar_2002

Paulの答えは素晴らしく、私を大いに助けてくれましたが、なぜ私の一部が表示されなかったのかと思っていました。理由は、FTインデックスの一部がテーブルではなくインデックス付きビューにあったためです。

インデックス付きビューとテーブルを組み込むためのわずかな修正は次のようになります。

SELECT SCHEMA_NAME(o.schema_id) AS SchemaName,
       o.name AS ObjectName,
       c.name AS FTCatalogName,
       f.name AS FileGroupName,
       i.name AS UniqueIdxName,
       cl.name AS ColumnName
FROM sys.objects o
    INNER JOIN sys.fulltext_indexes fi
        ON o.[object_id] = fi.[object_id]
    INNER JOIN sys.fulltext_index_columns ic
        ON ic.[object_id] = o.[object_id]
    INNER JOIN sys.columns cl
        ON ic.column_id = cl.column_id
           AND ic.[object_id] = cl.[object_id]
    INNER JOIN sys.fulltext_catalogs c
        ON fi.fulltext_catalog_id = c.fulltext_catalog_id
    INNER JOIN sys.filegroups f
        ON fi.data_space_id = f.data_space_id
    INNER JOIN sys.indexes i
        ON fi.unique_index_id = i.index_id
           AND fi.[object_id] = i.[object_id];
2
John Mccormack