복붙노트

[SQL] 인덱스의 키 컬럼으로 사용하기 위해 유효하지 않은 유형이다

SQL

인덱스의 키 컬럼으로 사용하기 위해 유효하지 않은 유형이다

나는 오류에서이

Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.

키는 NVARCHAR (최대)이다. 빠른 구글이 발견했다. 그러나 그것은 나던 솔루션이 무엇인지 설명한다. 키와 값은 문자열과 분명히 키 고유해야하며 싱글 있어야 모두 어디에서 사전 같은 것을 만들려면 어떻게해야합니까. 내 SQL 문을이었다

create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);

해결법

  1. ==============================

    1.고유 제한 조건은 행 당 8000 바이트 이상이 될 수 없습니다 만 있으므로 키의 안전한 최대 크기는 것, 심지어 다음 첫 번째 900 바이트를 사용합니다 :

    고유 제한 조건은 행 당 8000 바이트 이상이 될 수 없습니다 만 있으므로 키의 안전한 최대 크기는 것, 심지어 다음 첫 번째 900 바이트를 사용합니다 :

    create table [misc_info]
    ( 
        [id] INTEGER PRIMARY KEY IDENTITY NOT NULL, 
        [key] nvarchar(450) UNIQUE NOT NULL, 
        [value] nvarchar(max) NOT NULL
    )
    

    즉 키는 이상 450자를 초과 할 수 없습니다. 당신이 (당신이 하나 개 이상의 코드 페이지에서 저장 문자를 필요로하지 않는, 예를 들어 경우) VARCHAR 대신 NVARCHAR로 전환 할 수 있다면 그 900 자까지 증가시킬 수있다.

  2. ==============================

    2.인덱스에 사용할 수 없습니다 (2008 R2까지 최대) SQL 서버의 제한 (텍스트, NTEXT 같은 여러 다른 유형)이 varchar (max) 및 nvarchar (max)이 있습니다. 당신은 두 가지 옵션이 있습니다 : 1. 키 필드 전에서 제한된 크기를 설정합니다. NVARCHAR (100) 테이블에있는 모든 키와 값을 비교하는 점검 제한 조건을 작성합니다. 조건은 다음과 같습니다

    인덱스에 사용할 수 없습니다 (2008 R2까지 최대) SQL 서버의 제한 (텍스트, NTEXT 같은 여러 다른 유형)이 varchar (max) 및 nvarchar (max)이 있습니다. 당신은 두 가지 옵션이 있습니다 : 1. 키 필드 전에서 제한된 크기를 설정합니다. NVARCHAR (100) 테이블에있는 모든 키와 값을 비교하는 점검 제한 조건을 작성합니다. 조건은 다음과 같습니다

    ([dbo].[CheckKey]([key])=(1))
    

    . 그리고 [DBO] CHECKKEY]를로 정의 된 스칼라 함수이다 :

    CREATE FUNCTION [dbo].[CheckKey]
    (
        @key nvarchar(max)
    )
    RETURNS bit
    AS
    BEGIN
        declare @res bit
        if exists(select * from key_value where [key] = @key)
            set @res = 0
        else
            set @res = 1
    
        return @res
    END
    

    당신이 정말로 길이를 지정할 수 없습니다 않는 한 기본 인덱스가 점검 제한 조건보다 더 성능이 좋은 참고 것을, 점검 제한 조건을 사용하지 않도록.

  3. ==============================

    3.유일한 해결책은 당신의 고유 색인에 적은 데이터를 사용하는 것입니다. 키는 대부분의에서 NVARCHAR (450)이 될 수 있습니다.

    유일한 해결책은 당신의 고유 색인에 적은 데이터를 사용하는 것입니다. 키는 대부분의에서 NVARCHAR (450)이 될 수 있습니다.

    "SQL 서버는 모든 인덱스 키 컬럼의 최대 전체 크기의 900 바이트 제한을 유지합니다."

    MSDN에서 더 읽기

  4. ==============================

    4.해결책은 NVARCHAR (20)와 같은 키를 선언하는 것입니다.

    해결책은 NVARCHAR (20)와 같은 키를 선언하는 것입니다.

  5. ==============================

    5.키 길이가 크기 기가 바이트 필요하고,이, 그때 내가 유일한 옵션이 생각하는 사실을 필요로 할 가정에 대한 klaisbyskov의 코멘트를 주목 :

    키 길이가 크기 기가 바이트 필요하고,이, 그때 내가 유일한 옵션이 생각하는 사실을 필요로 할 가정에 대한 klaisbyskov의 코멘트를 주목 :

    해싱 어느 날, 당신은 충돌을 얻을 수 있다는 경고와 함께 제공됩니다.

    트리거는 전체 테이블을 스캔합니다.

    당신에게 이상 ...

  6. from https://stackoverflow.com/questions/2863993/is-of-a-type-that-is-invalid-for-use-as-a-key-column-in-an-index by cc-by-sa and MIT license