上記の作業で調査時に使った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;