'SQL Server 2005'에 해당되는 글 3

  1. 2010.09.06 순번 구하기
  2. 2009.07.25 SQL Server 2005에서 SchemaSpy 실행하기
  3. 2009.07.25 [IBM dWs] SchemaSpy - 데이터베이스 문서화하기

순번 구하기

TB_DATA에 pk1, pk2, pk_old 가 기본키로 존재했음.
pk_old는 중복된 값이 들어올 수 있어서 pk_new 가 새로운 키로 들어와서 pk_old와 교체해야 하는 상황이 생겼음.
pk_new는 순번이다.

pk_new를 추가하고 기존 기본키를 삭제.
pk_new는 데이터가 들어가 있지 않으므로 순번을 넣어야 함.
UPDATE TB_DATA --SQL Server 2005
SET pk_new = b.ser
FROM TB_DATA a, (
    SELECT rank() OVER (PARTITION BY pk1, pk2 ORDER BY pk_old) as ser
    , pk1, pk2, pk_old
    FROM TB_DATA
) b
WHERE a.pk1 = b.pk1 and a.pk2 = b.pk2 and a.pk_old = b.pk_old

- 순번을 rank()를 사용하지 않고 구하는 방법도 있음.

- 위 구문에서 SET 절의 pk_new를 a.pk_new로 하면 다음과 같은 에러가 발생한다.
메시지 4104, 수준 16, 상태 1, 줄 2
여러 부분으로 구성된 식별자 "a.pk_new"은(는) 바인딩할 수 없습니다.


SQL Server 2005에서 SchemaSpy 실행하기

- 데이터베이스 타입을 mssql05로 두고, 드라이버를 sqljdbc.jar를 사용한 경우 아래와 같은 에러가 발생한다.

Failed to retrieve column comments: com.microsoft.sqlserver.jdbc.SQLServerException: variant 데이터 형식은 지원되지 않습니다.
SELECT OBJECT_NAME(c.object_id) AS TABLE_NAME, c.name AS COLUMN_NAME, ex.value AS comments FROM sys.columns c LEFT OUTER JOIN sys.extended_properties ex ON ex.major_id = c.object_id AND ex.minor_id = c.column_id AND ex.name = 'MS_Description' WHERE OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0 ORDER BY OBJECT_NAME(c.object_id), c.column_id
com.microsoft.sqlserver.jdbc.SQLServerException: 연결이 닫혔습니다.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.checkClosed(Unknown Source)
    ...
    at net.sourceforge.schemaspy.SchemaAnalyzer.analyze(SchemaAnalyzer.java:164)
    at net.sourceforge.schemaspy.Main.main(Main.java:21)

- 데이터베이스 타입을 mssql05-jtds로 바꾼다.

[IBM dWs] SchemaSpy - 데이터베이스 문서화하기

- 사람을 위한 자동화: 전자동 문서화

- SchemaSpy - Graphical Database Schema Metadata Browser

- Graphviz 가 필요함.
이클립스를 사용하면 설치후 이클립스 재시작 필요
재시작하지 않으면 PATH에 추가된 Graphviz를 Ant로 실행시키지 못한다.

- Ant
- 실행 옵션
  • -s : SQL Server 2005에서는 테이블명이 dbo.TABLE로 되어 있음. dbo로 지정해야 함.
  • -i : TB.* 는 TB로 시작하는 테이블/뷰만을 대상으로 한다.
  • -cp : path 태그는 안되고 property로 해야 함. 드라이버 위치를 지정해 준다.
  • -charset : 지정하지 않으면 한글이 깨짐
- 뷰도 보임
그러나 다른 데이터베이스 개체는 안보임.