SQL Server 테이블에서 동일한 테이블의 다른 열을 해시하는 계산 된 열을 추가하려고합니다. 아래 테이블 구조입니다.계산 된 열에서 master.sys.fn_varbintohexsubstring 사용
주소 :
AddressID (INT, PK)
의해 AddressLine1 (NVARCHAR)
AddressLine2 (NVARCHAR)
시티 (NVARCHAR)
주 (NVARCHAR)
AddressHash (계산 열)
다음은 계산 열에 넣으려는 것입니다.
나는 테이블을 마우스 오른쪽 단추로 클릭하고 디자인하고 "계산 된 열 사양"에서 "공식"에 대한 위를 입력하십시오, 나는 다음과 같은 오류 얻을 :
- 테이블을 수정할 수 없습니다입니다.
사용자 정의 함수 이름에는이 컨텍스트에서 데이터베이스 이름 접두사를 사용할 수 없습니다.
그래서 내가 해시를 계산 공식에 그 UDF를 매핑 할 사용자 정의 함수를 사용하는 것이 생각했다. 다음은
내가 UDF 만드는 데 사용하고있는 코드입니다 :CREATE FUNCTION udfHashAddress
(
@pAddressLine1 nvarchar(50), @pAddressLine2 nvarchar(50), @pCity nvarchar(50), @pState nvarchar(50))
)
RETURNS nvarchar(max) -- not sure what the correct size would be
WITH SCHEMABINDING
AS
BEGIN
DECLARE @result nvarchar(max)
SELECT @result = MASTER.SYS.FN_VARBINTOHEXSUBSTRING(0, HASHBYTES('SHA1',COALESCE(@pAddressLine1, N'') + COALESCE(@pAddressLine2, N'') + COALESCE(@pCity, N'') + COALESCE(@pState, N'')), 1, 0)
RETURN @result
END
GO
을하지만 위의 코드에 다음과 같은 오류가 발생합니다 :
* 수 없습니다 스키마 바인딩 기능 'udfHashAddress의 이름 때문에' MASTER.SYS.FN_VARBINTOHEXSUBSTRING '은 (는) 스키마 바인딩에 유효하지 않습니다. 이름은 두 부분으로 형식이어야하고 객체 자체를 참조 할 수 없습니다 *
나는이 오류가 발생했습니다 "마스터"DB 접두사를 제거 할 때 :.
* 수 없습니다 스키마 바인딩 기능 'udfHashAddress'그것 때문에 시스템 개체 'SYS.FN_VARBINTOHEXSUBSTRING'을 참조하십시오. *
여기에 뭔가가 있습니까? 어떤 도움이나 조언을 부탁드립니다.
CONVERT(VARCHAR(MAX), HASHBYTES('SHA1','string'), 2);
이 대신 소문자로 대문자를 반환합니다,하지만 당신은 해결할 수를 가진 것이 중요 경우() LOWER :
당신이 그것을 문자열이어야해야합니까? 대신 varbinary (20)를 사용할 수 있습니까? 이 대답을보십시오. http://stackoverflow.com/questions/6807438/how-to-determine-whether-a-record-with-specific-image-data-type-already-exists-in/6809525#6809525 md5 및 varbinary (16). –