2014-03-28 33 views
0

我從來沒有聽說過CONTAINS和全文索引的,直到我讀了這個問題 - Is there any way to search for numbers with leading zeros in SQL Server Full-text indexes需要幫助來了解爲什麼我的CONTAINS不會返回結果?

我試圖創建此我自己的SQL示例如下圖所示。但是,我的查詢給了我零行。爲什麼?

最終查詢 -

select * 
from Philly 
where contains(body,'123') 

SQL創建表,以便您可以運行上述查詢 -

USE [MyDb] 
GO 
CREATE FULLTEXT CATALOG [DummyCatalog] 
WITH ACCENT_SENSITIVITY = ON 
AUTHORIZATION [dbo] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Philly](
    [id] [int] NOT NULL, 
    [body] [nvarchar](max) NULL, 
CONSTRAINT [PK_Philly] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 
INSERT [dbo].[Philly] ([id], [body]) VALUES (1, N'I like 000123') 
INSERT [dbo].[Philly] ([id], [body]) VALUES (2, N'Hi Five !!!') 

然後創建這裏給出關於使用說明書正文全文索引 - http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

+0

它看起來像忘了添加不返回結果的「最終查詢」。 – BateTech

+0

@BateTech - 謝謝。現在添加它。 –

+0

@BoratSagdiyev確保您安裝了全文搜索功能。 –

回答

0

也許是這樣的:

select id, body from Philly where contains(body,' "*123" '); 

我認爲你需要在select語句中指定列名,並且在這種情況下你必須使用*前綴。

0

我通常使用LIKE而不是contains,但只要表是全文索引,就可以使用。

select * 
from Philly 
where contains(body,'123') 

,如果你已經做了應該努力下你的表

CREATE FULLTEXT INDEX ON Philly KEY INDEX id 

但是我覺得它更容易只需運行

select * from Philly where body like '%123%' 

將返回任何行,其中體內含有123在任何地方進行或前面有任意數量的字符。

相關問題