作为具有格式化日期时间的全文索引的计算列
Computed column as a fulltext index with formatted datetime
我有以下 table:
[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
)
当我尝试更改此 table 上的全文索引时出现问题。
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
"All built-in string functions are deterministic."
所以我绞尽脑汁为什么说这个专栏不是确定性的。
你能试试这个吗? (它在 MSSQL 2008 上对我有用)(FORMAT() 似乎是不确定的(另请参阅 [link]
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;
我有以下 table:
[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
)
当我尝试更改此 table 上的全文索引时出现问题。
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
"All built-in string functions are deterministic." 所以我绞尽脑汁为什么说这个专栏不是确定性的。
你能试试这个吗? (它在 MSSQL 2008 上对我有用)(FORMAT() 似乎是不确定的(另请参阅 [link]
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;