2011-07-04 5 views
0

TSQL 코드에서 HASHBYTES()를 사용하는 방법은 무엇입니까?HASHBYTES() function

내 코드의 문제는

UPDATE mytable 
    SET hash_value=HASHBYTES('MD5',convert(varchar(max),col1),convert(varchar(max),col2),..) 

반환 NULL입니다. 코드에 어떤 문제가 있습니까?

+1

열을'varchar (max)'로 변환해야하는 이유는 무엇입니까? 전체 입력은 [8000 바이트]로 잘립니다. (http://msdn.microsoft.com/en-us/library/ms174415.aspx) –

답변

4

HASHBYTES은 두 가지 인수를 취합니다. 첫 번째는 해싱 알고리즘 (MD2 | MD4 | MD5 | SHA | SHA1)이고 두 번째는 해시 값입니다. 알고리즘에 다른 값이 있으면 결과적으로 NULL이됩니다.

두 번째 매개 변수의 값이 NULL 인 경우 결과적으로 NULL이 표시됩니다.

아마도 이런 식으로 사용할 수 있습니다.

hashbytes('MD5', coalesce(convert(varchar(max),col1), '') + 
       coalesce(convert(varchar(max),col2), '') + 
       ...) 

+으로 문자열을 연결하고 NULL 값을 처리하는 coalesce를 사용한다.

+0

UPDATE mytable SET hash_value = HASHBYTES ('MD5', convert (varchar (max), col1), convert (varchar (max), col2), ..) –

+0

결과는 NULL입니다. –

+1

@pawan - 두 개 이상의 매개 변수를 가질 수 없습니다. –

0

코드 예에서 col1이 무엇인지 알지 못하면이 질문에 대답하지 못할 수도 있지만 HASHBYTES의 첫 번째 인수는 algorithm이어야합니다.

MSDN에서 구문은 다음

HashBytes ('<algorithm>', { @input | 'input' })<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 

편집, 그것은 MSDN 문서는 입력 매개 변수 문자열 또는 varchar 형, NVARCHAR 또는 VARBINARY의 변수에 대한 참조 하나 인 것을 설명이다 단일 입력. 여러 입력 매개 변수를 전달 중입니다. 그러나 놀랍게도 나는 당신이 null이 오히려 오류가 내가 시도하고 때 실행하려고하면 The hashbytes function requires 2 argument(s).입니다. NULL 결과를 얻는 가장 큰 원인은 입력 값이 null, 즉 varchar로 변환하려는 열이 null 인 경우입니다. select hashbytes('md5', convert(varchar(max), null))을 실행하면 NULL 결과가 표시됩니다.

+0

UPDATE mytable SET hash_value = HASHBYTES ('MD5', convert (varchar (max), col1), convert (varchar (max), col2), ..) –

+0

UPTATE mytable SET hash_value = HASHBYTES ('MD5', convert (varchar (max), col1), convert (varchar (max), col2), ..) –

+0

MD5 알고리즘을 사용했습니다 –