【问题标题】:Why is my SQL query trying to convert an nvarchar value to int? (using CONTAINSTABLE())为什么我的 SQL 查询试图将 nvarchar 值转换为 int? (使用 CONTAINSTABLE())
【发布时间】:2011-05-10 19:11:16
【问题描述】:

我正在尝试让全文搜索在 SQL Server 2008 R2 中工作。我一直在与我们的管理员合作,我们相信我们有一个成功设置索引的目录。现在,我正在尝试使用全文函数查询索引表

这没有问题:

select *
from mPages
where contains(bodytext, ' "a dog" ')

但是,当我尝试使用 containstable() 获取排名值时,出现错误。

select mPages.bodytext, KEY_TBL.RANK
from mPages
     INNER JOIN
     CONTAINSTABLE(mPages, bodyText,
                    'dog') AS KEY_TBL
     ON mPages.pageID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;

错误:

Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'About' to data type int.

“关于”值位于名为 pagename 的列中。我不明白如何让这个错误消失。

有什么帮助吗?

【问题讨论】:

    标签: sql sql-server-2008 full-text-search full-text-indexing


    【解决方案1】:

    可能是在抱怨这一行:

    ON mPages.pageID = KEY_TBL.[KEY]
    

    假设pageIDint,它将尝试将key 转换为int,以便可以比较列。转换没有按计划进行。

    【讨论】:

    • 我很困惑。没有我在哪里告诉它使用pagename 作为密钥。有没有办法手动将密钥设置为pageID
    • @quakkels:检查全文索引上的 `TableFulltextKeyColumn` 属性。您可以通过视图sys.fulltext_indexes 在 SQL 中执行此操作
    • 我看到一个名为unique_index_id 的列,其值为2。不知道这意味着什么。
    • @quakkels:大概意思是它使用第二列作为键?
    • hmmm... 那将是 pagename 而不是 pageID。我可以将该视图更新为 1 吗?
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多