Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 然而,使用带通配符的全文的带有尾随*的同一个查询在2005年运行得相对较快(20秒),在将db迁移到2008 R2后,运行速度减慢到12分钟。似乎至少有一个其他用户有类似的结果,他开始了一个论坛帖子,我添加到。。。FREETEXT的运行速度仍然很快,但随着2008年进程拖尾*的方式的改变,有些东西“似乎”发生了变化。他们在升级顾问中给出了各种各样的警告,他们“改进”了全文,因此您的代码可能会被破坏,但不幸的是,他们没有给出任何关于某些不推荐使用的代码等的具体警告……只是一个免责声明,他们更改了它,使用风险由您自己承担_Sql Server_Full Text Search - Fatal编程技术网

Sql server 然而,使用带通配符的全文的带有尾随*的同一个查询在2005年运行得相对较快(20秒),在将db迁移到2008 R2后,运行速度减慢到12分钟。似乎至少有一个其他用户有类似的结果,他开始了一个论坛帖子,我添加到。。。FREETEXT的运行速度仍然很快,但随着2008年进程拖尾*的方式的改变,有些东西“似乎”发生了变化。他们在升级顾问中给出了各种各样的警告,他们“改进”了全文,因此您的代码可能会被破坏,但不幸的是,他们没有给出任何关于某些不推荐使用的代码等的具体警告……只是一个免责声明,他们更改了它,使用风险由您自己承担

Sql server 然而,使用带通配符的全文的带有尾随*的同一个查询在2005年运行得相对较快(20秒),在将db迁移到2008 R2后,运行速度减慢到12分钟。似乎至少有一个其他用户有类似的结果,他开始了一个论坛帖子,我添加到。。。FREETEXT的运行速度仍然很快,但随着2008年进程拖尾*的方式的改变,有些东西“似乎”发生了变化。他们在升级顾问中给出了各种各样的警告,他们“改进”了全文,因此您的代码可能会被破坏,但不幸的是,他们没有给出任何关于某些不推荐使用的代码等的具体警告……只是一个免责声明,他们更改了它,使用风险由您自己承担,sql-server,full-text-search,Sql Server,Full Text Search,也许,这是与这些问题最密切相关的MS hit 作为存储过程中的参数,您可以将其用作: ALTER procedure [dbo].[uspLkp_DrugProductSelectAllByName] ( @PROPRIETARY_NAME varchar(10) ) as set nocount on declare @PROPRIETARY_NAME2 varchar(10) = '"' + @PROPRIETARY_NAME + '*"' select l


也许,这是与这些问题最密切相关的MS hit

作为存储过程中的参数,您可以将其用作:

ALTER procedure [dbo].[uspLkp_DrugProductSelectAllByName]
(
    @PROPRIETARY_NAME varchar(10)
)
as
    set nocount on
    declare @PROPRIETARY_NAME2 varchar(10) = '"' + @PROPRIETARY_NAME + '*"'

    select ldp.*, lkp.DRUG_PKG_ID
    from Lkp_DrugProduct ldp
    left outer join Lkp_DrugPackage lkp on ldp.DRUG_PROD_ID = lkp.DRUG_PROD_ID
    where contains(ldp.PROPRIETARY_NAME, @PROPRIETARY_NAME2)

下面的链接可能会提供通配符使用的最终答案:


注意下面这段话:“但是,如果您指定了“Chain”或“Chain”,您将不会得到预期的结果。星号将被视为普通标点符号,而不是通配符。”

如果您可以访问全文搜索引擎的单词列表,您可以在此列表上执行“类似”搜索,并将数据库与找到的单词进行匹配,例如,将表格“单词”与以下单词进行匹配:

    pie
    applepie
    spies
    cherrypie
    dog
    cat
要将fts表格“全文”上此数据库中包含“饼图”的所有单词与字段“文本”匹配,请执行以下操作:

    to-match <- SELECT word FROM words WHERE word LIKE '%pie%'
    matcher = ""
    a = ""
    foreach(m, to-match) {
      matcher += a
      matcher += m
      a = " OR "
    }
    SELECT text FROM full_text WHERE text MATCH matcher

为了匹配,我无法在SQL 2005中复制此内容。如图所示,在搜索字符串前面使用*不会返回任何行。不确定为什么会将其标记为答案,因为它不完全准确。前导通配符在全文搜索中不起作用。在SQL Server 2008中使用containstable函数在全文索引上验证了这一点。请参阅Michael Stum的答案/帖子以了解原因。@Jagd-然后提供一个更好的答案。同意@Jagd,这应该被否决并取消标记为答案。OP显然是在谈论FT索引(因此将*作为通配符),而将*作为FT索引操作中的前缀是完全错误的。很高兴被证明是错的,但不要认为我是错的。前导通配符在sqlserver中不起作用,所以从原始问题的角度来看,这个答案是不正确的。我对这个问题做了很多搜索,遗憾的是,大多数人都错了,认为他们可以进行前导通配符搜索。前导通配符搜索不起作用。Franjo是正确的,通配符必须位于搜索短语的末尾。我正在使用SQL2008R2。它根本找不到它(它不做表格或索引扫描并找到它-它根本找不到它)鉴于他使用了CONTAINS关键字,他似乎已经在使用全文索引。@PRMan-在提到
CONTAINS
关键字之前,我回答了问题的第1版。这是很久以前的事了。
SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"datab*"')
SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"*abase"')
ALTER procedure [dbo].[uspLkp_DrugProductSelectAllByName]
(
    @PROPRIETARY_NAME varchar(10)
)
as
    set nocount on
    declare @PROPRIETARY_NAME2 varchar(10) = '"' + @PROPRIETARY_NAME + '*"'

    select ldp.*, lkp.DRUG_PKG_ID
    from Lkp_DrugProduct ldp
    left outer join Lkp_DrugPackage lkp on ldp.DRUG_PROD_ID = lkp.DRUG_PROD_ID
    where contains(ldp.PROPRIETARY_NAME, @PROPRIETARY_NAME2)
    pie
    applepie
    spies
    cherrypie
    dog
    cat
    to-match <- SELECT word FROM words WHERE word LIKE '%pie%'
    matcher = ""
    a = ""
    foreach(m, to-match) {
      matcher += a
      matcher += m
      a = " OR "
    }
    SELECT text FROM full_text WHERE text MATCH matcher