Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Tsql T-SQL FTS包含单个字符';n';匹配数字_Tsql_Full Text Search_Contains_Sql Server 2016 - Fatal编程技术网

Tsql T-SQL FTS包含单个字符';n';匹配数字

Tsql T-SQL FTS包含单个字符';n';匹配数字,tsql,full-text-search,contains,sql-server-2016,Tsql,Full Text Search,Contains,Sql Server 2016,我正在使用SQL Server 2016,遇到了一个非常奇怪的行为 我有一个为FTS编制索引的表 当按单个字符搜索时,如。。。包含(N's“a*”)它返回包含从a开始的单词的所有记录-好的 但是如果我用单个字符n像那样搜索。。。包含(N'“N*”)它不仅返回包含从N开始的单词的记录,而且还返回数字的记录 我不能谷歌没有提到这种行为。我相信这是一种通配符,但文档中对此没有任何说明 为什么会这样?是不是有逃逸序列之类的 UPD:测试环境 CREATE FULLTEXT CATALOG [Conten

我正在使用SQL Server 2016,遇到了一个非常奇怪的行为

我有一个为FTS编制索引的表

当按单个字符搜索时,如
。。。包含(N's“a*”)
它返回包含从
a开始的单词的所有记录-好的

但是如果我用单个字符n像那样搜索
。。。包含(N'“N*”)
它不仅返回包含从
N
开始的单词的记录,而且还返回数字的记录

我不能谷歌没有提到这种行为。我相信这是一种通配符,但文档中对此没有任何说明

为什么会这样?是不是有逃逸序列之类的

UPD:测试环境

CREATE FULLTEXT CATALOG [ContentCatalog] WITH ACCENT_SENSITIVITY = ON
GO
CREATE TABLE [dbo].[Content]([id] [uniqueidentifier] NOT NULL, [content] [nvarchar](max) NOT NULL,
  CONSTRAINT [PK_Content] PRIMARY KEY CLUSTERED ([id] ASC))
GO
ALTER TABLE [dbo].[Content] ADD CONSTRAINT [DF_Content_id]  DEFAULT (newid()) FOR [id]
GO
INSERT [Content] ([content]) VALUES
    (N'abc def nop'),
    (N'zxc asd qwe'),
    (N'zaq nhy bgt'),
    (N'123 456 789'),
    (N'z12 x34 c56')
GO
CREATE FULLTEXT INDEX ON [Content]([content] LANGUAGE 'English')
KEY INDEX [PK_Content]ON ([ContentCatalog], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)

SELECT * FROM [dbo].[Content]
SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled') -- should be 1
SELECT * FROM [dbo].[Content] WHERE CONTAINS([Content], N'"a*"') -- returns 2 records
SELECT * FROM [dbo].[Content] WHERE CONTAINS([Content], N'"n*"') -- returns extra record with digits only
这不是一个我知道是违反规则的答案,但我认为它添加了有用的额外信息,OP可能希望将其纳入他们的问题中。 有关更多信息,这似乎只适用于
包含的
中的特定数量的
n
值。下面使用问题中的脚本构建环境,但使用不同的测试值。
选择
然后将contains返回的所有值整理成一行,以便于比较:

insert [content] ([content]) values
    (N'abc nop abc'),
    (N'abc nno abc'),
    (N'abc nnn abc'),
    (N'abc nnnnbc'),
    (N'abc nnnnnc'),
    (N'1 2 3'),
    (N'10 11 12'),
    (N'100 101 102'),
    (N'1000 1001 1002'),
    (N'10000 10001 10002')
go
          select 'a*' as ContainsSearch,    stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"a*"') for xml path('')),1,4,'') as ReturnedValues
union all select 'n*' as ContainsSearch,    stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"n*"') for xml path('')),1,4,'') as ReturnedValues
union all select 'nn*' as ContainsSearch,   stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"nn*"') for xml path('')),1,4,'') as ReturnedValues
union all select 'nnn*' as ContainsSearch,  stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"nnn*"') for xml path('')),1,4,'') as ReturnedValues
union all select 'nnnn*' as ContainsSearch, stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"nnnn*"') for xml path('')),1,4,'') as ReturnedValues
union all select 'nnnnn*' as ContainsSearch,stuff((select ' || ' + content from [dbo].[content] where contains([content], N'"nnnnn*"') for xml path('')),1,4,'') as ReturnedValues
其结果是:

+----------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| ContainsSearch |                                                             ReturnedValues                                                              |
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| a*             | abc nop abc || abc nno abc || abc nnn abc || abc nnnnbc || abc nnnnnc                                                                   |
| n*             | abc nop abc || abc nno abc || abc nnn abc || abc nnnnbc || abc nnnnnc || 10 11 12 || 100 101 102 || 1000 1001 1002 || 10000 10001 10002 |
| nn*            | abc nno abc || abc nnn abc || abc nnnnbc || abc nnnnnc || 10 11 12 || 100 101 102 || 1000 1001 1002 || 10000 10001 10002                |
| nnn*           | abc nnn abc || abc nnnnbc || abc nnnnnc                                                                                                 |
| nnnn*          | abc nnnnbc || abc nnnnnc                                                                                                                |
| nnnnn*         | abc nnnnnc                                                                                                                              |
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------+

您是否可以包含一个脚本来创建一个环境,该环境可以复制该脚本供我们测试?由于在我能找到的任何地方都没有提到这一点,我认为您的设置中还有其他原因导致了这种行为。@iamdave更新了PostThank,不过您还需要编写全文索引和目录等。@iamdave更新了PostThank。FTS设置是默认的老实说,我不知道这里发生了什么,考虑到文档中没有任何相关内容,您可能遇到了错误…我做了错误报告