[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.고유 제한 조건은 행 당 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.인덱스에 사용할 수 없습니다 (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.유일한 해결책은 당신의 고유 색인에 적은 데이터를 사용하는 것입니다. 키는 대부분의에서 NVARCHAR (450)이 될 수 있습니다.
유일한 해결책은 당신의 고유 색인에 적은 데이터를 사용하는 것입니다. 키는 대부분의에서 NVARCHAR (450)이 될 수 있습니다.
"SQL 서버는 모든 인덱스 키 컬럼의 최대 전체 크기의 900 바이트 제한을 유지합니다."
MSDN에서 더 읽기
-
==============================
4.해결책은 NVARCHAR (20)와 같은 키를 선언하는 것입니다.
해결책은 NVARCHAR (20)와 같은 키를 선언하는 것입니다.
-
==============================
5.키 길이가 크기 기가 바이트 필요하고,이, 그때 내가 유일한 옵션이 생각하는 사실을 필요로 할 가정에 대한 klaisbyskov의 코멘트를 주목 :
키 길이가 크기 기가 바이트 필요하고,이, 그때 내가 유일한 옵션이 생각하는 사실을 필요로 할 가정에 대한 klaisbyskov의 코멘트를 주목 :
해싱 어느 날, 당신은 충돌을 얻을 수 있다는 경고와 함께 제공됩니다.
트리거는 전체 테이블을 스캔합니다.
당신에게 이상 ...
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
'SQL' 카테고리의 다른 글
[SQL] A는 포함하거나 테이블 또는 인덱싱 된 뷰에 FREETEXT 조건이 전체 텍스트하지 않기 때문에 사용할 수 없습니다 인덱스 (0) | 2020.05.08 |
---|---|
[SQL] 무슨 오류를 일으키는 : 참조 된 테이블에 대한 키를 제공에는 고유 제한 조건의 일치가 없다? (0) | 2020.05.08 |
[SQL] 차 인덱스 번호를 다시 지정하는 방법 (0) | 2020.05.08 |
[SQL] SQL Server의 데이터베이스의 모든 테이블 사이의 관계를 알고 (0) | 2020.05.08 |
[SQL] SQL 성능 : WHERE WHERE (ROW_NUMBER) 대 (0) | 2020.05.08 |