我想在T-SQL中創建一個類似於Java中的標量函數。在T-SQL中爲字符串實現GetHashCode
在命令式語言的標準實現是:
int hash = 0;
for (int i = 0; i < length; i++)
{
hash = 31*hash + value[i];
}
return hash;
我不是真的在TSQL好實現這一點,從我的POV寫命令式的代碼在TSQL的東西,應該是避免。我想這可以使用CTE完成?請問=)
另外,我可以使它始終是積極的,即當結果超過integrer max,那麼它流過0而不是整數min?讓我們假設可能的參數數量(我的解決方案中特殊類的數量)並不是很大。假設它永遠不會超過1000,所以我相信在這裏即使使用uint也能避免碰撞。
PS:如果有人interesed什麼,我需要這個了,比我能解釋一下,大概你能提出更好的解決方案。我有一個integer
標識列和varchar
列'TypeFullName'
表 - 這是我們C#解決方案中類的全名。
我需要編寫一個腳本,手動設置ID爲TypeFullName
(是的,打開SET IDENTITY INSERT
選項)的函數依賴關係。這樣我可以計算ID,如果我知道類型名稱。我知道這聽起來像一個設計不好的系統,它可能是,但相信我,我現在只需要這樣做)
謝謝!
row_number()over是一個TALLY表。有關更多詳細信息,請參閱Jeff Moden。基本上它是交叉的數字表格。因此,您正在查看每個字符並應用轉換。 –
是的,我知道它是如何工作的,只會列出值1..n,所以它有點像迭代器一樣工作。我的意思是,它看起來像一個黑客) –
唯一的選擇是創建一個表[msdb]。[dbo]。[Tally]並加載1 M行或您可能使用的最大迭代器。將[msdb]。[dbo]。[Tally])中的代碼更改爲'(SELECT TOP(LEN(@str)))爲X'。 Tally表假定比WHILE循環更快。但看起來很有趣,因爲它引用了sys.all_objects。 (HACK) –