我正在使用Javascript后端开发人员开发Web应用程序。我们认为将计算列添加到其中一个表中以有效地充当每个“事件”的唯一ID会很有用。
我已经尝试将HASHBYTES应用于时间戳和用户ID字段的串联,这在Select语句中运行良好。但是,当使用Persisted(计算)列更改我的表时,我收到错误:
表'myTable'中的计算列{name}无法保留,因为该列是非确定性的。
我不太清楚这个错误告诉我的是什么。它与我在计算中使用datetimeoffset字段有关吗?或者我是否尝试以不正确的方式使用hashbytes
?有没有更好的方法来计算和存储UUID?
您是否依赖隐式转换来生成计算列?尝试使用CONVERT函数。散列时间戳列不是确定性的,如果使用CONVERT函数可以帮助使其确定性如下所示。
从DateStamp中的事件中选择hashbytes('MD5',convert(varchar(200),(CONVERT(varchar(10),datestamp,126)+''CONVERT(VARCHAR(24),datestamp,114)),2)) ='2016-06-30 12:19:35.257961'