【发布时间】:2016-08-09 03:08:19
【问题描述】:
当数据库列的特定属性Deterministic 引起我的注意时,我正在我的 SQL Server 数据库中创建一个表。请看下面的截图:
我已经知道确定性和非确定性 SQL Server 函数,但我想知道它是否以任何方式适用于 SQL Server 中的数据数据类型?
我问的原因是我确实扫描了 SQl Server v2008 和 v2012 中可用的所有数据类型,但 Deterministic 字段的值对所有这些类型都显示为 Yes。它没有针对任何单一数据类型显示 No。
所以我的问题是它是否是 SQL Server 中任何数据类型的正确属性,它仍然会影响值在列中的存储方式,或者它只是过去的遗留物,可能来自 SQL Server 2000 或 SQL Server 2005 年,曾经有一些数据类型本质上是不确定的。任何信息对于理解 SQL Server 中数据类型的这一特性都将非常有用。到目前为止,我们在 SQL Server 中是否有任何本质上不确定的数据类型?
由于我没有看到任何数据类型的No,我变得更加困惑。我也用谷歌搜索了很多,但每次搜索都会将我带到像下面这样的确定性和非确定性 SQL Server 函数,没有人谈论与 SQL Server 数据类型相关的Non-deterministic 特征。
https://technet.microsoft.com/en-us/library/ms178091(v=sql.110).aspx
【问题讨论】:
-
计算列可以是不确定的。
-
msdn.microsoft.com/en-AU/library/ms188300.aspx 为 int 类型的 a 列添加计算列 -> b 列公式 = a + DATEPART(dd, GETDATE()) 将导致 Deterministic = No
-
@Blorgbeard 我用这个公式
([QtyAvailable]*[UnitPrice])创建了一个计算列。它仍然导致Deterministic=Yes。 QtyAvailable 和 UnitPrice 分别是smallint和money类型表中的两列。 -
create table t (a int, b money, c AS ([b]+[a]), d AS ([b]+datepart(day,getdate()))) insert into t values (1, 2) select COLUMNPROPERTY (OBJECT_ID('dbo.t'), 'c', 'IsDeterministic') select COLUMNPROPERTY (OBJECT_ID('dbo.t'), 'd', 'IsDeterministic') -
嗯,这是一个确定性公式。尝试包括对非确定性函数的调用,例如
getdate()。
标签: sql-server sql-server-2008 sql-server-2012