我想在 T-SQL 中创建一个标量函数,它类似于 Java 中的那些。
命令式语言的标准实现是:
int hash = 0;
for (int i = 0; i < length; i++)
{
hash = 31*hash + value[i];
}
return hash;
我在 tsql 中实现这一点并不是那么好,从我的 POV 来看,在 t-sql 中编写命令式代码是应该避免的。我想这可以使用 CTE 来完成?请=)
另外,我可以让它总是积极的,即当结果超过整数最大值时,它会超过 0 而不是整数最小值?让我们假设可能的参数数量(我的解决方案中特殊类的数量)并不是很大。假设它永远不会超过 1000,所以我确信即使使用 uint 也可以避免在这里发生冲突。
PS:如果有人对我需要这个做什么感兴趣,我可以解释一下,也许你可以提出一个更好的解决方案。我有一个带有integer
标识列和一个varchar
列的表'TypeFullName'
- 这是我们 C# 解决方案中一个类的全名。
而且我需要编写一个脚本,手动将 ID 设置为函数依赖项TypeFullName
(是的,打开该SET IDENTITY INSERT
选项)。这样我就可以计算 ID,如果我知道类型名称的话。我知道这听起来像是一个设计糟糕的系统,而且很可能是这样,但相信我,我现在只需要这样做)
谢谢!