Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 使用'进行全文搜索;非静态';searchterm(来自联接表变量)_Sql Server 2008_Tsql_Full Text Search_Table Valued Parameters - Fatal编程技术网

Sql server 2008 使用'进行全文搜索;非静态';searchterm(来自联接表变量)

Sql server 2008 使用'进行全文搜索;非静态';searchterm(来自联接表变量),sql-server-2008,tsql,full-text-search,table-valued-parameters,Sql Server 2008,Tsql,Full Text Search,Table Valued Parameters,希望(实际上是想:)有人已经有了类似的问题并解决了 简而言之,这是一个基本问题。。由于“wordsearch”功能的使用和相关数据将在不久的将来迅速增长,我们(在这种情况下是指我)需要改用全文搜索 现在一切都安排好了。。但是我无法让querysyntax工作(下面是简化版) where子句是一个更大的子句的一部分 .. 只是猜测一下,我认为'CONTAINS'-子句需要一种'static'searchterm输入,不能处理依赖行的值 在msdn中或此处找不到任何内容 其中一个主要问题是“基本问题

希望(实际上是想:)有人已经有了类似的问题并解决了

简而言之,这是一个基本问题。。由于“wordsearch”功能的使用和相关数据将在不久的将来迅速增长,我们(在这种情况下是指我)需要改用全文搜索

现在一切都安排好了。。但是我无法让querysyntax工作(下面是简化版)

where子句是一个更大的子句的一部分 .. 只是猜测一下,我认为'CONTAINS'-子句需要一种'static'searchterm输入,不能处理依赖行的值

在msdn中或此处找不到任何内容

其中一个主要问题是“基本问题”不是固定的,可能会发生变化,搜索条件(搜索哪个问题,搜索哪个术语)是完全动态的。。所以没有开关箱或类似的东西。。我认为动态sql也不是一个真正的选项(出于不同的原因,但这远远超出了这个问题的范围:)…)

但是,对该数据库的所有搜索都是通过带有标量和表值参数(如@searchValues)的存储过程完成的。。如果可能的话,我想保持这种状态

因此任何提示、提示和建议都将不胜感激

以及供参考和完整性 简化数据库结构的简短版本:

答案idbigint(PK),项目iduniqueidentifier(FK),基本问题iduniqueidentifier(FK),nvarchar(max))

基本问题id唯一标识符(PK),代码varchar(900),问题类型(FK),…描述性内容..)

项目id唯一标识符(PK),…描述性内容..)

。。甚至可以改变数据库结构,使搜索在某种程度上表现良好并再次工作;)。。
(目前我们有大约120k个条目ID和大约250万个答案,但这将很容易增加10倍甚至更多)

您是否只是在“答案文本”表中搜索特定字符串?另外,@searchterm现在是静态的。您希望它从何处动态拉动?@lloyd No如上所述,这只是一个简化的示例。searchterms将从传递给存储过程的表值参数中提取(结构类似于上面的searchValues)
declare @searchTerm varchar(256)
set @searchTerm = 'test'

declare @searchValues table (code varchar(900), searchterm varchar(256))
-- this is just for testing, usually the table is prefilled with different codes and values
if(@searchTerm is not null) 
insert into @searchValues
    select code, @searchTerm from dbo.base_question where question_type_id = 'text'

select distinct(a.item_id) 
from dbo.answer_text as a with (nolock)
join dbo.base_question as bqt with (nolock) on bqt.id = a.base_question_id
join @searchValues as st on bqt.code = st.code
where a.value is not null
and not LTRIM(RTRIM(a.value)) = ''
and CONTAINS(a.value, st.searchterm)