T-SQL에서 자바와 비슷한 스칼라 함수를 만들고 싶습니다.T-SQL에서 문자열에 대한 GetHashCode 구현
명령형 언어의 표준 구현은 다음과 같습니다
int hash = 0;
for (int i = 0; i < length; i++)
{
hash = 31*hash + value[i];
}
return hash;
내가 이것을 구현하기 위해 정말 TSQL에서 좋은 아니에요, 내 POV에서 TSQL에 필수적 스타일 코드를 작성하는 것은해야 뭔가 피하십시오. CTE를 사용하여이 작업을 수행 할 수 있습니까? Please =)
또한 항상 결과가 integrer max를 초과하면 정수 min이 아닌 0 이상으로 흐르게 할 수 있습니까? 가능한 인수의 수 (내 솔루션의 특수 클래스 수)가 실제로 크지 않다고 가정 해 봅시다. 1000을 초과해서는 안된다고 가정 해 봅시다. 그래서 여기에서도 uint와 충돌을 피할 수 있습니다.
PS : 누군가가 내가 설명 할 수있는 것보다 나는이 필요합니까, 아마 당신은 더 나은 솔루션을 제안 할 수있는 interesed의합니다. integer
식별 열과 varchar
열 'TypeFullName'
인 테이블을 가지고 있습니다. 우리 C# 솔루션의 클래스의 전체 이름입니다.
그리고 수동으로 ID를 TypeFullName
(예, SET IDENTITY INSERT
옵션 사용)의 기능 의존으로 설정하는 스크립트를 작성해야합니다. 타입 이름을 알고 있다면 ID를 계산할 수 있습니다. 나는 그것이 나쁜 디자인을 가진 시스템처럼 들린다는 것을 알고 있습니다. 아마도 그렇습니다.하지만 지금은 이것을해야합니다.)
Thank you!
그 row_number()는 TALLY 테이블입니다. 자세한 내용은 Jeff Moden을 참조하십시오. 기본적으로 교차하는 숫자 표입니다. 따라서 각 캐릭터를보고 변환을 적용합니다. –
예, 그것이 작동하는 방법을 알고 있습니다. 그러면 값 1..n이 나열되므로 iterator로 작동합니다. 내가 말한 것은 해킹처럼 보입니다) –
유일한 대안은 [msdb]. [dbo]. [Tally] 테이블을 만들고 1 M 행 또는 사용할 수있는 최대 반복기로로드하는 것입니다. 코드를 '(msdb]. [dbo]. [Tally]에서 TOP (LEN (@str))을 X'로 변경하십시오. 탈리 테이블은 WHILE 루프보다 빠릅니다. 그러나 sys.all_objects를 참조하기 때문에 재미있어 보입니다. (HACK) –