SQL Server中的非确定性数据类型

RBT*_*RBT 5 sql-server sql-server-2008 sql-server-2012

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函数,如下所示,并且没有人讨论Non-deterministic与SQL Server数据类型相关的特性.

https://technet.microsoft.com/en-us/library/ms178091(v=sql.110).aspx

Paw*_*Dyl 5

如果您仔细阅读此MSDN文档,您会发现:

IsDeterministic - 列是确定性的.此属性仅适用于计算列和视图列.

它适用于从涉及非确定性函数的其他列派生的列(计算,视图).

例子:

CREATE TABLE Deterministic
(
    ID int,
    Calculated AS SYSDATETIME()
)

SELECT COLUMNPROPERTY(OBJECT_ID('Deterministic'), 'Calculated', 'IsDeterministic') IsDeterministic
--Returns 0
Run Code Online (Sandbox Code Playgroud)

如果您在此表上创建视图,如下所示并执行以下查询

CREATE VIEW vDeterministic AS
SELECT ID, Calculated, DATEADD(D, 1, Calculated) Tomorrow
FROM Deterministic
GO
SELECT 'Calculated' ColumnName,
    COLUMNPROPERTY(OBJECT_ID('vDeterministic'), 'Calculated', 'IsDeterministic') IsDeterministic
UNION ALL
SELECT 'Tomorrow',
    COLUMNPROPERTY(OBJECT_ID('vDeterministic'), 'Tomorrow', 'IsDeterministic')
Run Code Online (Sandbox Code Playgroud)

您还会收到非确定性列

ColumnName   IsDeterministic
----------   ---------------
Calculated   0
Tomorrow     0
Run Code Online (Sandbox Code Playgroud)