2017-01-11 3 views
0

단순히 넣으려면 수십만 개의 항목과 수백 개의 다른 열이있는 매우 큰 database이 있어야합니다.HASHBYTES (SHA1)을 사용하여 특정 열을 해싱하면 해당 열이 손상되지 않은 열보다 더 많은 고유 행을 갖게됩니다.

그 열 중 일부는 내가이처럼 해시하려고하지만 때 등등 공간을 절약하기 위해,에 해시 할 필요가 :

select distinct 
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question] 

좀 더 행이 결국 난 그냥 그랬다면 이것보다 :

select distinct 
columnA + [Column_in_question] 
from [dbo].[Tabled_in_question] 

가장 좋은 추측은 Hashbytes가 대소 문자를 구분하지 않는다는 것입니다. 그러나 나는 이것을 어떻게 시험하거나 고칠 수 있는지 정말로 모른다.

아이디어가 있으십니까? 당신이

답변

0

오른쪽의 차이는 .. 바이트

select distinct 
convert(VARBINARY(10), [Column_in_question]), 
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question] 

dB의 조합이 가장 아마도 CI입니다 (대소 문자 구분)하지만 hashbytes 사용하여 당신이 그것을 확인할 수 있습니다 대소 문자 구분

이며, 같은 당신이 VARBINARY에 텍스트를 변환 볼 수 있습니다, 그들은

가 정렬 및을 비교 한 규칙을 변경하려면이 시도 다른

select distinct 
columnA + [Column_in_question] collate LATIN1_GENERAL_BIN 
from [dbo].[Tabled_in_question] 
+0

제안 사항을 살펴 봤지만 조금 도움이되지만 행 수 사이에 약간의 불일치가 있습니다. 3971, hashBytes를 사용할 때 3974를 사용합니다. 아직도, 부 단위를 사용하지 않을 때 얻은 3952보다 훨씬 가깝습니다. 그래서 그 컬럼에 다른 문제가 있다고 가정합니다. –

+0

무슨 뜻입니까? – MtwStark

+0

내가 제안한 데이터 정렬보다 해시 바이트를 사용하는 행이 여전히 많다는 의미였습니다. 그래서 나는 더 많은 행을 표시하는 대소 문자를 구분하는 것 외에 다른 문제가 있다고 가정하고 있습니다. –