바다토리 웨어하우스
SQL에서 1024개 이상의 테이블 컬럼 만들기 본문
테이블을 만들다 보면 어쩔 수 없이 칼럼을 많이 만들어야 할 때가 있을 것입니다. 쿼리의 효율성으로 보아서는 무작정 칼럼을 많이 만드는 것이 성능면에서 좋은 방식은 아니지만, 그럼에도 불구하고 칼럼을 나열하여 그걸 다시 가로로
변환하느니, 컬럼으로 만드는 것을 선호하는 사람도 있을 수도 있을 것입니다.
MSSQL의 경우 칼럼을 아무리 많이 만들고 싶어도 DB 성능을 고려하여 1024개까지만 만들 수 있습니다.
1025개 이상은 만들고 싶어도 에러를 내뱉으며 만들 수가 없기 때문입니다.
그래서 1025개 이상의 컬럼을 만들기 위해서는 SPARSE 즉 스파스 열을 사용하면 가능해집니다.
CREATE TABLE TBL(
col1 varchar(4) SPARSE,
col2 varchar(10) SPARSE,
col3 varchar(10) SPARSE,
cs XML columns_set FOR ALL_SPARSE_COLUMNS)
Go
Insert into TBL(col1, col2, col3) values('AA','BB','CC')
Go
Insert into TBL(col1, col2, col3) values('DD','EE','FF')
Go
Select * From TBL
테이블 생성시 각 칼럼을 SPARSE칼럼으로 생성을 하여 줍니다.
위의 예시처럼 col1, col2, col3을 SPARSE 칼럼으로 생성함으로써, cs칼럼에 XML형태로 저장을 하게 됩니다.
사용자는 SPARSE를 이용하여 원한는 개수만큼의 칼럼을 만들지만, 실제 DB상에서는 cs칼럼에 1024개 이상의
칼럼을 저장시키는 것입니다.
Select 명령어를 이용하여 조회를 해보면 cs칼럼에 XML형태의 데이터로 Insert 한 데이터가 저장이 되어있는 것을
볼 수 있습니다.
또한 그 데이터를 클릭하면 XML형태로 나열되게 됩니다.
Update TBL_A
Set col1='TEST'
GO
Select * From TBL_A Where col1='TEST'
이후 부터는 일반 쿼리를 조회하는 것과 동일하게 사용하면 됩니다.
* 를 이용하여 조회를 하게 되면, cs 칼럼에 저장된 XML형태로 칼럼들이 나타나지만,
Select col1 처럼 직접 칼럼명을 지정하여 조회를 하게 되면 해당 칼럼명에 해당되는
데이터만 조회를 할 수가 있습니다.
또한 Where 조건절에서도 일반 컬럼처럼 값에 대한 조건을 주어 조회를 할 수가 있습니다.
SELECT *
FROM (
SELECT * FROM OpenQuery([000.000.000.000],'select col1, col2, col3 From TBL_A')
) X
단, 로컬서버가 아닌 원격지 서버로부터 테이블의 데이터를 읽어오기 위해서는
XML 분산쿼리를 이용해야 합니다.
OpenQuery를 이용하여 원격지 서버의 IP주소와 데이터를 가져오는 Query문을 작성하여 줍니다.
일반 테이블의 경우 원격지 서버에서 데이터를 가져올 때
Select * From [000.000.000.000]. DB명. 소유자.테이블명으로 가져오지만, SPARSE를 이용하여
생성된 테이블의 경우에는 OpenQuery를 이용하여 원격지 서버에서 가져와야 합니다.
사실상 1024개 이상의 칼럼으로 테이블의 생성할 일은 그렇게 많지는 않을 것입니다.
1024개의 칼럼을 핸들링하기 위해서는 Update와 Insert 부분에 처리하고자 하는
컬러명을 직접 기입해주어야 하는 엄청난 번거로움이 있기 때문이며,
데이터를 처리하는 데 있어, 서버의 로드도 고려해야 하기 때문입니다.
'IT > mssql' 카테고리의 다른 글
DB복원 후 원래 계정으로 로그인이 안될때 방법 (0) | 2022.05.26 |
---|---|
1년 전체 주말 등록하는 쿼리 스크립트 (0) | 2022.05.24 |
MSSQL 중복없는 랜덤코드 생성하기 (0) | 2022.05.20 |
MSSQL을 이용한 JSON데이터 처리 방법 (0) | 2022.05.12 |
MSSQL 많이 활용하는 cursor문 (0) | 2022.05.03 |