[SQL] 나는 SQL_VARIANT 데이터 유형을 사용해야합니까?
SQL나는 SQL_VARIANT 데이터 유형을 사용해야합니까?
SP4와 SQL 서버 2005를 사용하고 난 데이터베이스 테이블을 설계하고있다.
다음 표는 DDL
CREATE TABLE CPSync4D.ProjectProfilerOption
(
ProjectProfilerOptionID INT IDENTITY(1,1) CONSTRAINT PK_ProjectProfilerOption_ProjectProfilerOptionID PRIMARY KEY
,ProjectID INT CONSTRAINT FK_ProjectProfilerOption_Project_ProjectID FOREIGN KEY(ProjectID) REFERENCES CPSync4D.Project(ProjectID) ON DELETE CASCADE
,ProfilerOptionID TINYINT CONSTRAINT FK_ProjectProfilerOption_ProfilerOption_ProfilerOptionID FOREIGN KEY(ProfilerOptionID) REFERENCES CPSync4D.ProfilerOption (ProfilerOptionID)
,ProfilerOptionValue sql_variant NOT NULL
)
Go
profileroptionvalue 열은 30 자, 정수 또는 소수 값, 예를 들어 개까지 문자열 중 하나를 저장할 수 값 "ProfilerValueType"또는 12.52 또는 20 등 (더 적은 (100)보다 두 소수보다보다 값 및 정수)이다
나는 사용해야 SQL_VARIANT 또는 VARCHAR (30) ...? 나는 결코 전에 SQL_VARIANT을 사용하지 않고 데이터베이스 설계의 관점에서 사용하지 않는하지 않도록 어떤 의미.
.NET 코드와의 sql_variant를 사용하는 모든 함정 ...
해결법
-
==============================
1.10 가지 이유는 명시 적으로 SQL Server 데이터 형식을 변환하는
10 가지 이유는 명시 적으로 SQL Server 데이터 형식을 변환하는
하지만 마음에 이러한 제한 및 성능에 미치는 영향과 함께, 내가 먼저 대안을 볼 것 전에 내가 SQL_VARIANT를 사용하지 않았습니다.
적어도 선호하는 솔루션 내 가장 일 것입니다 다음
편집 Cudo는 ta.speot.is에의
변형은 외부 키의 차의 일부가 될 수 있습니다
-
==============================
2.내 대답은 조금 늦었 그러나 여기에서 만들어지는 테이블은 응용 프로그램 구성 테이블처럼 조금 보이는 것을 알고있다. 주어진 제안에 대한 대안으로,의 약 30 개 또는 8000 문자에 자신을 제한하지 생각해 봅시다. 의는 또한 조금 더 자기 포함 및 사용자 정의 만들어 보자.
내 대답은 조금 늦었 그러나 여기에서 만들어지는 테이블은 응용 프로그램 구성 테이블처럼 조금 보이는 것을 알고있다. 주어진 제안에 대한 대안으로,의 약 30 개 또는 8000 문자에 자신을 제한하지 생각해 봅시다. 의는 또한 조금 더 자기 포함 및 사용자 정의 만들어 보자.
마음에 그 생각과 이유조차 설정의 여러 수준을 허용 할 XML 데이터 유형으로 "프로필"정보 저장 하시겠습니까? 당신은 아마 더 이상 ProfilerOptionID 등의 열을 필요로하지 않을 하나 개의 간단한 제어 테이블이 다운받을 수 있습니다.
-
==============================
3.그것의 가치는 암시의 sql_variant 열을 복사 할 수 없습니다 것을주의.
그것의 가치는 암시의 sql_variant 열을 복사 할 수 없습니다 것을주의.
예를 들면 만들기 CPSync4D.ProjectProfilerOption의 백업 스키마 CPSync4D.ProjectProfilerOption_bkp라고
그리고
Insert into CPSync4D.ProjectProfilerOption_bkp ( ProjectProfilerOptionID ,ProjectID ,ProfilerOptionID ,ProfilerOptionValue ) SELECT ProjectProfilerOptionID ,ProjectID ,ProfilerOptionID ,ProfilerOptionValue FROM CPSync4D.ProjectProfilerOption
백업 테이블에 ProfilerOptionValue에 대한 모든 값은 VARCHAR 될 것입니다
또한 참고 : 나는 SQL_VARIANT 복제에 사용할 수 없습니다 그러나 이것은 사실이 아니다는 것을 들었습니다. 난 그냥 일을했지만이 이전 버전에 대한 진정한되었을 수도 있기 때문에 물론 (난 그렇게 확신 할 수 없습니다 또는이 거부 확인 할 수있는 이전 버전이없는) (내가 사용하고 있음) SQL 2008 R2 수행 할 수 있습니다.
사실 생각이 무엇인지, 당신이 그것을에서 SQL 변형있는 테이블을 복제하고 많은 데이터를 가지고 수행 한 후 뭔가 잘못하고 수동으로 데이터를 수정해야하는 경우, 당신은 쓰기에 SQL의 더러운 부분이있을 수 있다는 것입니다 . 데이터를 복사 할 때 동일한 복사본 문에 몇 가지 기본 유형으로 복사 할 수 있기 때문입니다. 나는 (스냅 샷의 명백한 제외하지만 사용은 bcp에) 여러 행을 복사하지 않기 때문에 복제가이 문제가없는 것 같아요.
추신. 나는 이것이 이전 게시물을 실감하지만 같은 질문 다른 미래 방문자를 위해 여기를 넣어.
from https://stackoverflow.com/questions/9039455/should-i-use-sql-variant-data-type by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 DATEADD () 함수에 대한 해당 (0) | 2020.06.10 |
---|---|
[SQL] 하나의 문에서 순서에서 쿼리 여러 NEXTVAL (0) | 2020.06.10 |
[SQL] 지난 3 개월 동안의 데이터를 취득하기위한 SQL 쿼리 (0) | 2020.06.10 |
[SQL] 동적 순서 방향 (0) | 2020.06.10 |
[SQL] 여러 열 평균 (0) | 2020.06.09 |