我的数据库包含表'Product',列'Name'。我需要实现大小写和重音不敏感的搜索,所以我尝试更改列的排序规则,如下所示:
EXEC sp_fulltext_column @tabname = 'Product' , @colname = 'Name', @action = 'drop'
ALTER TABLE dbo.Product
ALTER COLUMN Name nvarchar(400) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL;
EXEC sp_fulltext_column @tabname = 'Product' , @colname = 'Name', @action = 'add'
然后我检查了列的整理,如下所示:
SELECT collation_name FROM sys.columns
WHERE name = 'name' AND object_id = (select object_id from sys.tables where name = 'Product');
并且正确地将排序规则设置为CI和AI(SQL_Latin1_General_CP1_CI_AI)。
我在数据库中测试产品的名称如'Čučoriedka','Čúčo','Test'。 我想通过查询选择'Čučoriedka'和'Čúčo':
select * from product where CONTAINS([Name], 'cuc')
但是'test'都没有使用这些查询:
select * from product where CONTAINS([Name], 'tes')
select * from product where PATINDEX('tes', [Name] COLLATE SQL_Latin1_General_CP1_CI_AI ) > 0
我还尝试了另一种排序规则,但没有任何效果。
你知道这有什么用吗?
非常感谢!马立克
答案 0 :(得分:0)
我找到了解决方案!我发现,整理只对订购有影响。我正在使用全文搜索,所以我需要更改全文索引。如果其他人需要这样做,我就是这样做的。
IF EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id('Product'))
DROP FULLTEXT INDEX ON [Product]
DECLARE @create_index_text nvarchar(4000)
SET @create_index_text = '
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[Product]''))
ALTER FULLTEXT INDEX ON [Product]([Name] Language 1051, [ShortDescription] Language 1051, [FullDescription] Language 1051, [Sku] Language 1051)
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('Product') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
EXEC(@create_index_text)
ALTER FULLTEXT CATALOG nopCommerceFullTextCatalog REBUILD WITH ACCENT_SENSITIVITY=OFF;
语言代码1051适用于斯洛伐克语,您可以在此处找到您的代码:http://technet.microsoft.com/en-us/library/ms176076.aspx
希望它有所帮助!