当数据库列的特定属性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
答案 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')