2017-04-20 1 views
0

나는 다음 표와 SQL Server 데이터베이스를 가지고 :테이블에 다른 열의 해시 값 인 열을 자동으로 계산할 수 있습니까?

CREATE TABLE [dbo].[Kanji] (
    [KanjiId]    UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text]     NVARCHAR (5)  NOT NULL, 
    [Freq]     INT    NULL, 
    [Grade]    INT    NULL, 
} 

가 많은 수의 행이 테이블에 있고 난 그냥 10 %를 선택할 수 있도록하고 싶습니다. 이상적으로 나는 [텍스트] 열의 내용에 대한 해시 값과 같은 내용의 열 (어쩌면 계산 열)을 테이블에 갖고 싶습니다. 0-9의 숫자 인 해시 값이므로이 값을 가진 모든 행을 선택할 수 있습니다.

이와 같은 열을 만들 수있는 방법이 있습니까?

+1

어떤 종류의 해시 함수를 염두에두고 있습니까? Java 또는 C#에서 해시 맵에 사용하는 정렬을 사용하는 경우 동일한 해시를 가진 행이 두 개 없을 수 있습니다. 적어도 충돌이 일어나기 전에 아주 큰 테이블이 필요합니다. –

+1

당신이 이것을 할 수있는 방법이 있다는 것을 의미합니다. 예를 들어'[partCol] AS CHECKSUM ([Text]) % 10 PERSISTED'와 같이 이론적으로 테이블을 대략 10으로 나눌 수 있습니다. 당신은 한 번에 10 %를 선택합니까? 더 좋은 방법으로 해결하고 싶은 다른 문제가있는 것 같습니다. – ZLK

답변

1

이 시도 :

CREATE TABLE [dbo].[Kanji] (
    [KanjiId]    UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text]     NVARCHAR (5)  NOT NULL, 
    [Freq]     INT    NULL, 
    [Grade]    INT    NULL, 
    [Hash] AS (CONVERT([bigint],hashbytes('md5',[Name]))%(5)+(5)), 
} 

을 당신은 예를 들어, -9 (9)에 값을 얻을 수 있습니다.

+0

0과 9 사이의 값을 제공하기 위해이를 수정할 수있는 방법이 있습니까? 감사합니다 – Alan2

+0

@Alan 예, 제가 답변을 편집했습니다. – Backs

관련 문제