SI건 SM이건 DBA나 모델러를 하다보면 필히 다양한 정의서가 존재한다.
해당 사이트별로 상이하나 엑셀 규격만 맞출 수 있다면
반복적인 혹은 대량의 DDL 문으로 인한 시간 낭비를 줄일 수 있다.
아래는 테이블내 컬럼의 추가, 수정, 삭제시 약속된 엑셀 양식의 정의서에서
VBA 스크립트를 이용해 DDL문을 추가하는 Excel VBA 코드이다.
CECK 제약조건도 종종 사용되지만 구차니즘으로 살짝 제외하였다.
그럼에도 센스있는 데이터 관지자라면 살짝 손봐서 사용이 가능할 것이다.
우선 소스는 아래와 같으며 첨부된 파일에서 DDL 생성하기 클릭시 N,O열에 DDL문과 코멘트 생성 확인이 가능하다.
VBA 소스는 아래와 같다.
'## 컬럼 추가/수정
Public Sub makeColumn()
Dim iLoop As Integer
Dim iStart As Integer
Dim iEnd As Integer
Dim strFlagAdd As String
Dim strCollate As String
Dim strDefault As String
Dim strLen As String
Dim strNull As String
Dim strFlagCom As String
Dim varTable
iStart = 3
iEnd = Range("B" & Application.Rows.Count).End(xlUp).Row
With ActiveSheet
For iLoop = iStart To iEnd
varTable = Split(.Cells(iLoop, 2).Value, ".")
If InStr(1, Trim(.Cells(iLoop, 3).Value), "추", vbTextCompare) > 0 Or InStr(1, Trim(.Cells(iLoop, 3).Value), "A", vbTextCompare) > 0 Then
strFlagAdd = " ADD "
strFlagCom = "add"
ElseIf InStr(1, Trim(.Cells(iLoop, 3).Value), "수", vbTextCompare) > 0 Or InStr(1, Trim(.Cells(iLoop, 3).Value), "M", vbTextCompare) > 0 Then
strFlagAdd = " ALTER COLUMN "
strFlagCom = "update"
Else
strFlagAdd = " DROP COLUMN "
strFlagCom = ""
End If
' 문자열 체크 COLLATE , length
If InStr(1, UCase(.Cells(iLoop, 6).Value), "CHAR", vbTextCompare) > 0 Then
strCollate = " COLLATE Korean_Wansung_CS_AS "
strLen = "(" & .Cells(iLoop, 7).Value & ")"
ElseIf InStr(1, UCase(.Cells(iLoop, 6).Value), "INT", vbTextCompare) > 0 Then
strCollate = " "
strLen = ""
ElseIf InStr(1, UCase(.Cells(iLoop, 6).Value), "DECIMAL", vbTextCompare) > 0 _
Or InStr(1, UCase(.Cells(iLoop, 6).Value), "NUMERIC", vbTextCompare) > 0 Then
strCollate = " "
strLen = "(" & .Cells(iLoop, 7).Value & "," & .Cells(iLoop, 8).Value & ")"
Else
strCollate = ""
strLen = ""
End If
' DEFAULT 체크
If InStr(1, Trim(.Cells(iLoop, 3).Value), "삭", vbTextCompare) > 0 Or InStr(1, Trim(.Cells(iLoop, 3).Value), "D", vbTextCompare) > 0 Or _
InStr(1, Trim(.Cells(iLoop, 3).Value), "수", vbTextCompare) > 0 Or InStr(1, Trim(.Cells(iLoop, 3).Value), "M", vbTextCompare) > 0 Then
strDefault = ";"
ElseIf InStr(1, UCase(.Cells(iLoop, 9).Value), "BLANK", vbTextCompare) > 0 Or InStr(1, UCase(.Cells(iLoop, 9).Value), Chr(39) & Chr(39), vbTextCompare) > 0 Then
strDefault = "CONSTRAINT DF_" & Replace(.Cells(iLoop, 2).Value, ".", "_") & "_" & .Cells(iLoop, 6).Value & " DEFAULT " & Chr(39) & Chr(39) & " WITH VALUES;"
ElseIf .Cells(iLoop, 10).Value = "" Then
strDefault = ";"
ElseIf InStr(1, UCase(.Cells(iLoop, 9).Value), "GETDATE", vbTextCompare) > 0 Then
strDefault = "CONSTRAINT DF_" & Replace(.Cells(iLoop, 2).Value, ".", "_") & "_" & .Cells(iLoop, 6).Value & " DEFAULT GETDATE() WITH VALUES;"
ElseIf IsNumeric(.Cells(iLoop, 10).Value) Then
strDefault = "CONSTRAINT DF_" & Replace(.Cells(iLoop, 2).Value, ".", "_") & "_" & .Cells(iLoop, 6).Value & " DEFAULT " & .Cells(iLoop, 8).Value & " WITH VALUES;"
Else
strDefault = "CONSTRAINT DF_" & Replace(.Cells(iLoop, 2).Value, ".", "_") & "_" & .Cells(iLoop, 6).Value & " DEFAULT " & Chr(39) & Replace(.Cells(iLoop, 10).Value, Chr(39), "") & Chr(39) & " WITH VALUES;"
End If
' Null 체크
If InStr(1, UCase(.Cells(iLoop, 10).Value), "N", vbTextCompare) > 0 Then
strNull = " NOT NULL "
Else
strNull = " NULL "
End If
If strFlagCom = "" Then
.Cells(iLoop, 14).Value = "ALTER TABLE " & .Cells(iLoop, 2).Value & strFlagAdd & Trim(.Cells(iLoop, 5).Value) & ";"
ElseIf strFlagCom <> "" Then
.Cells(iLoop, 14).Value = "ALTER TABLE " & .Cells(iLoop, 2).Value & strFlagAdd & Trim(.Cells(iLoop, 5).Value) & " " & Trim(.Cells(iLoop, 6).Value) & strLen & strCollate & strNull & strDefault
.Cells(iLoop, 15).Value = "EXEC sys.sp_" & strFlagCom & "extendedproperty @name=N'MS_Description', @value=N'" & .Cells(iLoop, 11).Value & _
"', @level0type=N'SCHEMA',@level0name=N'" & varTable(0) & _
"', @level1type=N'TABLE',@level1name=N'" & varTable(1) & _
"', @level2type=N'COLUMN',@level2name=N'" & .Cells(iLoop, 5).Value & "';"
End If
Next
End With
End Sub
이 글은 이비니어스( www.evinious.co.kr )의 소유이며 불펌은 허락하지 않습니다.
↓ ↓ ↓ 개발문의는 아래 클릭 ↓ ↓ ↓
'데이터베이스 모델링' 카테고리의 다른 글
모델링 및 쿼리작성 - 신규개발(SI) rule (0) | 2025.04.02 |
---|---|
MS-SQL server TABLE 생성 DDL - VBA 스크립트 (0) | 2025.03.25 |
데이터베이스 모델링 1-4 PRIMARY KEY & UNIQUE (2) | 2025.01.14 |
데이터베이스 모델링 1-3 작명(Naming rule) (2) | 2025.01.02 |
데이터베이스 모델링 1-2 정형 vs 비정형(EAV) (1) | 2024.12.23 |