【发布时间】:2008-10-29 12:50:20
【问题描述】:
我在表中有一个 XML 列;我想将该 XML 中的某个值“提升”为计算列并将其索引以加快搜索速度。我有一个函数可以接收 XML 信息并输出感兴趣的元素,如下所示:
CREATE FUNCTION [dbo].[fComputeValue] (@data XML)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
RETURN @data.value('(/Metadata/Value[@Key="StartDate"])[1]', 'datetime')
END
但是当我尝试创建计算列时:
ALTER TABLE dbo.CustomMetadataTable ADD [StartDate] AS ([dbo].[fComputeValue]([CustomMetadataColumn])) PERSISTED
我收到以下错误:
消息 4936,第 16 级,状态 1,第 2 行 计算列 '开始日期' 在表 'CustomMetadataTable' 中不能 持续存在,因为该列是 非确定性的。
如果我可以:
- 使用 varchar、int、double(即日期时间除外)值
- 删除 PERSISTED 关键字(但我无法在列上创建索引)
我还应该提到日期时间值采用 XSD 日期时间格式。 有任何想法吗?谢谢。
【问题讨论】:
标签: sql sql-server sql-server-2005