SQL Server

时间:2016-08-09 03:08:20

标签: sql-server sql-server-2008 sql-server-2012

当数据库列的特定属性Deterministic引起我的注意时,我在SQL Server数据库中创建了一个表。请参阅下面的屏幕截图:

enter image description here

我已经知道确定性和非确定性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

1 个答案:

答案 0 :(得分:5)

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

  

IsDeterministic - 列是确定性的。此属性仅适用   计算列和查看列。

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

<强>示例:

function editForm(id, value) {
var e = document.getElementById(id);
if (e.style.display == 'none') {
    var m = value;
    $.ajax({
        url: "modul/mod_supplier/modal_edit.php",
        type: "GET",
        data: {id: m, },
        success: function (ajaxData) {
            $("#ModalEdit").html(ajaxData);
            $("#ModalEdit").modal('show', {backdrop: 'true'});
        }
    });
}}

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

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')
相关问题