问题 TSQL:如何检查列是否启用了全文?


我需要修改列定义,但我想检查列是否首先启用了全文。有没有办法在TSQL脚本中进行这样的检查?

我正在使用SQL Server 2005。


6408
2018-05-04 09:09


起源



答案:


你可以尝试使用 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'

7
2018-05-04 09:39



那么0在这种情况下实际上是好的吗? - Kees C. Bakker
在这种情况下,这些值是可能的吗? 0 和 NULL? - Kees C. Bakker
对不起,我编辑了几次答案,所以我不知道你指的是什么修订版。但根据 MSDN:0 - 没有全文索引,1 - 全文索引,NULL - 错误。 - Christian.K


答案:


你可以尝试使用 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'

7
2018-05-04 09:39



那么0在这种情况下实际上是好的吗? - Kees C. Bakker
在这种情况下,这些值是可能的吗? 0 和 NULL? - Kees C. Bakker
对不起,我编辑了几次答案,所以我不知道你指的是什么修订版。但根据 MSDN:0 - 没有全文索引,1 - 全文索引,NULL - 错误。 - Christian.K


你可以尝试这样的事情:

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')

6
2018-05-04 09:38



甜蜜,有效。但似乎Christian.K的答案较小。 - Kees C. Bakker
我更喜欢这个答案,因为它显示了所有全文索引列以及列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


我想从答案的最后一个例子 这个问题 可能有帮助。不过,我还没有测试过它。


0
2018-05-04 09:19



如果我正确地阅读它,答案就是关于 表 而不是 柱。 - Kees C. Bakker
至少它是答案的一部分;如果表没有 TableHasActiveFulltextIndex,这个专栏不可能有一个。 - Kees C. Bakker
@ KeesC.Bakker:嗯,你是对的......也许你可以利用这里列出的通用查询的一些部分: stackoverflow.com/questions/765867/... - Mihai Todor