studio - SQL Server中的非確定性數據類型



sql server是什麼 (1)

我在SQL Server數據庫中創建一個表時, Deterministic的數據庫列引起了我的注意。 請看下面的截圖:

我已經意識到了確定性和非確定性的SQL Server功能,但是我想知道它是否適用於SQL Server中的數據數據類型?

我問的原因是,我逐字掃描了SQl Server v2008和v2012中可用的所有數據類型,但Deterministic字段的值對所有這些數據都顯示為“是”。 它沒有顯示任何單個數據類型的No

所以我的問題是,它是SQL Server中的任何數據類型的一個合適的屬性,它仍然影響值存儲在列中的方式,或者它只是過去的遺留,可能來自SQL Server 2000或SQL Server 2005曾經是一些非確定性的數據類型。 任何信息對於理解SQL Server中的數據類型的這個特性都是非常有用的。 從今天起,我們在SQL Server中是否有任何數據類型,這在本質上是非確定性的?

由於我沒有看到任何的數據類型我更困惑。 我也搜索了很多東西,但每次搜索都會將我帶到如下所示的確定性和非確定性SQL Server功能,而沒有人會談到與SQL Server數據類型相關的Non-deterministic特徵。

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


如果仔細閱讀這個MSDN文檔,你會發現:

是確定性的 - 列是確定性的。 該屬性僅適用於計算列和視圖列。

它適用於從具有非確定性函數的另一列導出的列(計算,視圖)。

例子:

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

SELECT COLUMNPROPERTY(OBJECT_ID('Deterministic'), 'Calculated', 'IsDeterministic') IsDeterministic
--Returns 0

如果您按如下所示在該表上創建視圖並執行以下查詢

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')

您也收到非確定性列

ColumnName   IsDeterministic
----------   ---------------
Calculated   0
Tomorrow     0




sql-server-2012