【问题标题】:Computed column as a fulltext index with formatted datetime计算列作为具有格式化日期时间的全文索引
【发布时间】:2017-04-05 08:32:48
【问题描述】:

我有下表:

[dbo].[TableName]
(
[created] datetime not null,
[modified] datetime null,
[computedValue] as 
(
    format([created], 'yyy-MM-dd MM/dd/yyy') +
    case when ([modified] is not null)
    then 
            (format([modified], 'yyyy-MM-dd MM/dd/yyyy')) 
    end
)

当我尝试更改此表上的全文索引时,就会出现问题。

ALTER FULLTEXT INDEX ON [dbo].[TableName] ADD ([computedValue] LANGUAGE 1033);

作为回应,我收到以下错误:

Computed column 'computedValue' cannot be used for full-text search because it is nondeterministic or imprecise nonpersisted computed column.

根据 MSDN : https://msdn.microsoft.com/en-us/library/ms181984(v=sql.110).aspx

“所有内置字符串函数都是确定性的。” 所以我绞尽脑汁为什么它说这个专栏不是确定性的。

【问题讨论】:

标签: sql tsql full-text-indexing deterministic


【解决方案1】:

你可以试试这个吗? (它在 MSSQL 2008 上对我有用)(FORMAT() 似乎是不确定的(另见 [link]Can I make SQL Server FORMAT deterministic?

    CREATE TABLE TableName
    (ID INT NOT NULL,
    [created] datetime not null,
    [modified] datetime null,
    [computedValue] as (
        CONVERT(varchar(10), [created], 121) +' '  + CONVERT(varchar(10), [created], 110)
        + CASE WHEN ([modified] IS NOT NULL)
        THEN CONVERT(varchar(10), [modified], 121) +' '  + CONVERT(varchar(10), [modified], 110) 
        END 
    ) 
    )
    ;
    ALTER TABLE TABLENAME ADD CONSTRAINT TABLENAME_PK PRIMARY KEY (ID);
   GO   
    CREATE FULLTEXT CATALOG CATALOG1;  
    GO  
    CREATE FULLTEXT INDEX ON [TableName]([computedValue]  LANGUAGE 1033 ) KEY INDEX TABLENAME_PK ON CATALOG1;

【讨论】:

  • 我正准备用同样的结果回答我的问题。是的,这也对我有用:)
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多