上記の作業で調査時に使ったSQLを残す
二度と使いたくないけどが・・・
DB内のカラムを取得する方法
select * from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = 'dbname'
order by TABLE_NAME;
このデータと設計書をマッチング処理を作ってチェックした
DB内の全インデックスの一覧を取得する方法
select table_schema,table_name,index_name,column_name,seq_in_index from information_schema.statistics
where table_schema = "DBName"
and index_name <> 'PRIMARY'
and index_name like 'IX%'
order by table_name,index_name,seq_in_index
;
DB内のユニークカラムを探す
select table_schema,table_name,index_name,column_name,seq_in_index from information_schema.statistics
where table_schema = "DBName"
and index_name <> 'PRIMARY'
and not(index_name like 'IX%')
order by table_name,index_name,seq_in_index
;
インデックスはとれないので取得して目視で確認した
設計書と現在の内容のチェックはツール作るほど貼っていなかった
DB内の外部キー制約一覧
SELECT
F1.TABLE_SCHEMA AS TABLE_SCHEMA
,F1.TABLE_NAME AS TABLE_NAME
,F1.COLUMN_NAME AS COLUMN_NAME
,F2.CONSTRAINT_TYPE AS CONSTRAINT_TYPE
,F2.CONSTRAINT_NAME AS CONSTRAINT_NAME
FROM
information_schema.KEY_COLUMN_USAGE F1
LEFT JOIN information_schema.TABLE_CONSTRAINTS F2 ON F1.TABLE_SCHEMA = F2.TABLE_SCHEMA
AND F1.CONSTRAINT_NAME = F2.CONSTRAINT_NAME
WHERE
F2.CONSTRAINT_TYPE = 'FOREIGN KEY'
;
目視でも確認したが
0件だった
テーブル設計はエクセルのシート単位に分かれているので
シートを結合する処理をつくった
Sub sh_check() Dim newSh As String Dim Sh As Worksheet, myFlag As Boolean newSh = "全データ" myFlag = False For Each Sh In ThisWorkbook.Worksheets If Sh.name = newSh Then myFlag = True '----全データシートのデータをクリアし、先頭へ移動します Worksheets(newSh).Cells.ClearContents Worksheets(newSh).Move before:=Sheets(1) Exit For End If Next Sh '----全データシートを先頭へ追加します If myFlag = False Then ActiveWorkbook.Worksheets.Add(before:=Worksheets(1)).name = newSh End If End Sub Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long Dim iMatomeCount As Integer Dim wsMatomeData As Worksheet Dim strWorkTableName As String Application.ScreenUpdating = False '----全データシートの有無をチェックします sh_check '----列見出しをコピーします Set wsMatomeData = Worksheets(1) wsMatomeData.Cells(1, 1).Value = "テーブル名" wsMatomeData.Cells(1, 2).Value = "順番" Worksheets(4).Range("(A6:G6)").Copy Worksheets(1).Range("C1") '日本語カラム名 カラム名 型 長さ インデックス NULL 備考をコピー iMatomeCount = 2 For i = 1 To Worksheets.Count With Worksheets(i) If Worksheets(i).name = "全データ" Or Worksheets(i).name = "全データ (差分用)" Or Worksheets(i).name = "一覧" Or Worksheets(i).name = "memcache一覧" Then ElseIf Worksheets(i).name = "template" Then Else strWorkTableName = Worksheets(i).Cells(3, 6).Value Debug.Print strWorkTableName For lRow = 7 To 100 If Worksheets(i).Cells(lRow, 2).Value = "" Then Else Debug.Print strWorkTableName & ":" & Worksheets(i).Cells(lRow, 2).Value wsMatomeData.Cells(iMatomeCount, 1).Value = strWorkTableName wsMatomeData.Cells(iMatomeCount, 2).Value = lRow - 6 wsMatomeData.Cells(iMatomeCount, 3).Value = Worksheets(i).Cells(lRow, 1).Value wsMatomeData.Cells(iMatomeCount, 4).Value = Worksheets(i).Cells(lRow, 2).Value wsMatomeData.Cells(iMatomeCount, 5).Value = Worksheets(i).Cells(lRow, 3).Value wsMatomeData.Cells(iMatomeCount, 6).Value = Worksheets(i).Cells(lRow, 4).Value wsMatomeData.Cells(iMatomeCount, 7).Value = Worksheets(i).Cells(lRow, 5).Value wsMatomeData.Cells(iMatomeCount, 8).Value = Worksheets(i).Cells(lRow, 6).Value wsMatomeData.Cells(iMatomeCount, 9).Value = Worksheets(i).Cells(lRow, 7).Value iMatomeCount = iMatomeCount + 1 End If Next lRow End If End With 'GoTo TestContenueLabel Next i TestContenueLabel: 'デバック用で使った Worksheets(1).Activate Range("A1").Select Application.ScreenUpdating = True End Sub
ストアドの確認
SHOW PROCEDURE STATUS;
もしあったら
SHOW CREATE PROCEDURE sample01;