TSQL:如何检查列是否启用了全文索引?

16

我需要修改一个列定义,但我想先检查该列是否启用了全文搜索。是否有办法在TSQL脚本中进行此类检查?

我正在使用SQL Server 2005。


我认为这个问题的答案中的最后一个示例可能会有所帮助。不过我还没有测试过。 - Mihai Todor
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
16
你可以尝试使用 COLUMNPROPERTY() 函数。
DECLARE @value INT;
SELECT @value = COLUMNPROPERTY(OBJECT_ID('schema.table'), 'column_name', 'IsFulltextIndexed')

IF (@value = 1)
  PRINT 'Fulltext column'
ELSE
  PRINT 'No Fulltext column'

在这种情况下,可能的值是什么?0NULL - Kees C. Bakker
1
抱歉,我编辑了几次答案,所以我不知道你指的是哪个版本。但根据MSDN:0-无全文索引,1-全文索引,NULL-错误。 - Christian.K

14

你可以尝试类似这样的做法:

SELECT * 
FROM sys.columns c 
INNER JOIN sys.fulltext_index_columns fic ON c.object_id = fic.object_id 
                                          AND c.column_id = fic.column_id

如果您需要将其限制在给定的表格中,请使用此方法:

SELECT * 
FROM sys.columns c 
INNER JOIN sys.fulltext_index_columns fic ON c.object_id = fic.object_id 
                                          AND c.column_id = fic.column_id
WHERE c.object_id = OBJECT_ID('YourTableNameHere')

太好了,这个可行。但是似乎Christian.K的答案更简洁。 - Kees C. Bakker
2
我更喜欢这个答案,因为它显示了所有全文索引列以及列ID。这使您可以运行类似于 SELECT display_term, column_id, document_count FROM sys.dm_fts_index_keywords (DB_ID('DB_NAME'), OBJECT_ID('TABLE_NAME')) order by document_count desc 的查询来显示所有术语及其索引位置。 - webnoob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,