【发布时间】:2016-05-19 07:59:09
【问题描述】:
我需要以下内容才能在 SQL Server 2008 R2 上工作
我有一个列要添加到一个需要与之关联的公式的表中,我正在使用一个标量值函数。
这是函数:
ALTER FUNCTION [dbo].[fnGetSaleDate_fromXML]
(
@transaction_data xml
)
RETURNS date
WITH SCHEMABINDING
AS
BEGIN
declare @dateXmlValue varchar(20)
declare @dateAssembledValueStr varchar(20)
declare @dateValue date
set @dateXmlValue = '19052014' --this ultimately comes from another column
if @dateXmlValue <> 'Not supplied'
BEGIN
set @dateAssembledValueStr = concat(substring(@dateXmlValue, 5, 4), substring(@dateXmlValue, 3, 2), substring(@dateXmlValue, 1, 2))
if ISDATE(@dateAssembledValueStr) = 1
BEGIN
set @dateValue = CONVERT(date, @dateAssembledValueStr, 103)
END
END
return @dateValue
END
我已经用有效和无效数据测试了这个函数,它工作得很好。
当我尝试将其添加为专栏的论坛时,我收到错误:
Msg 4936, Level 16, State 1, Line 1
Computed column 'contxxxxxe' in table 'propexxxxxxxxxn' cannot be persisted because the column is non-deterministic.
如果我用if ISDATE(@dateAssembledValueStr) = 1 注释该行,它可以正常工作。
研究表明,使用isDate()(除非在非常特殊的情况下)是不确定的。我的问题是,鉴于我的要求,除了自己重新创建 IsDate() 之外,我该如何解决这个问题?
【问题讨论】:
-
什么版本的 SQL Server?
-
SQL Server 2012。我也会编辑帖子。
-
@VojtěchDohnal .... 这是一个快速编辑。使用 Sql-Server 标签而不是 sql-server-2012 标签搜索问题的人也能看到这个吗?我在问,因为即使我使用的是 sql server 2012,我也不知道问题是否仅针对此版本的 Sql Server,这就是我最初使用 sql-server 标记的原因。
-
我想我在某处读到这些标签效果很好,当您添加
sql-server-2012时,无需添加一般sql-server。但现在找不到任何参考。但现在我在这里看到了其他答案:meta.stackexchange.com/questions/18878/… -
有些标签有同义词 -
sql-server-2012和sql-server就是这种情况。
标签: sql sql-server sql-server-2012 sql-server-2008-r2