최대 열 개수(1024개)를 초과하므로 CREATE TABLE이 실패했습니다 라는 애러문구가 뜹니다;
실제로 컬럼개수 1168 정도 됩니다... 그래서 이부분을 어떻게 처리 해야하는지 도저히 찾을 수가 없네요..
인터넷으로 찾아 본 결과...
--------------------------------------------------------------------------------------------------------------------------------------------------------
SQL 2008이라고 하더라도 기본 칼럼개수가 1024 개를 초과할 수는 없습니다.
단, SQL Server 2008 부터는 SPARSE 칼럼이라는 특별한 칼럼형식의 경우, 이를 칼럼집합으로 정의하여 여러 개의 칼럼을 하나의 칼럼집합으로 묶고, 이를 하나의 칼럼으로 인식하게 하는 기능을 지원합니다.
칼럼집합을 사용하면 30,000 개까지의 칼럼을 하나의 테이블에 정의할 수 있습니다.
일반구조가 아닌 별도의 처리가 필요하며 XML 처리가 필요합니다.
자세한 내용은 온라인 설명서의 해당 부분을 참조하십시오.
http://technet.microsoft.com/en-us/library/cc280521.aspx
--------------------------------------------------------------------------------------------------------------------------------------------------------
이런 답변이 나왔는데... 무슨 말인지 잘 몰르겠네요.ㅠㅠ
SPARSE 컬럼 형식으로 가지고 처리하면 된다고 합니다만...;;;;
어떻게 해야 할 지 잘몰르겠네요.ㅠㅠ
고수님들 부탁드립니다..(_ _)
Comment 2
-
catchv
2013.06.18 13:24
-
건우아빠
2013.06.18 22:42
새로운 기능을 배웠습니다. 감사합니다.
내용을 보니 실제 컬럼은 xml형식으로 컬럼셋을 지정을해서 저장이 되네요.
앞에 SPARSE 로 컬럼구성에 따른 정의를 내리고
xml column_set FOR ALL_SPARSE_COLUMNS 로 저장할 컬럼을 지정을 하시면 30,000개 까지의 컬럼을 하나의 xml컬럼으로 지정을 할수가 있습니다.
CREATE TABLE t (
i int SPARSE ,
j int SPARSE ,
k int SPARSE ,
l int SPARSE ,
m int SPARSE ,
cs xml column_set FOR ALL_SPARSE_COLUMNS);
GO
INSERT t(cs) VALUES ('<i>0</i><j>0</j><k>0</k>');
GOINSERT t(cs) VALUES ('<i>9</i><j>20</j><k>40</k>');
SELECT i,j,k,l,m FROM t
GOupdate t
set cs = '<i>2</i>'
where i = 0SELECT i FROM t
예시같이 i~m 까지는 SPARSE 로 가상컬럼 개념이고 데이타는 cs의 컬럼셋으로 저장이 됩니다.
인덱스도 SPARSE 컬럼을 지정을 할수도 있네요...
일반 컬럼과 중복으로도 가능 하네요... 1168 컬럼을 만드신다면 일부를 컬럼셋으로 만드시던가
전체를 컬럼셋으로 만드셔도 나쁘지는 않을듯 한데..
자료 입력/수정시에는 xml형식으로 입력을 하셔야 하는 불편함은 있을듯 합니다.
SPARSE 컬럼은 사용을 안해봐서 모르겠고
(MSDN 상에는 NULL의 사이즈를 줄이기 위한 것이 주목적인것으로 판단됩니다.)
일반적으로 컬럼이 많거나 사이즈가 큰경우 테이블 수직 분할을 합니다.
키가 되는 컬럼을 기준으로 두개의 테이블로 나누어서 처리를 하시면 됩니다.
물론 프로그램 작업양은 늘어 납니다. ^^;
-- catchv