--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013-04-07(Sun)

SQL Server の定義情報を出力

SQL Serverの定義情報を簡単に確認するために、以下のWSHを作成しました。
未確認ですが、SQL Server 2005以降で動作すると思われます。

※実際には出力するテキストの整形や出力対象DBやテーブル選択、またプログラムにコメントも入っていますが、とりあえず出力を単純なCSVに変更しプログラムの肝心の部分のみ掲載しています。

Const ODBC_DSN = "Driver=SQL Server; Server=.\SQLEXPRESS"
Const OUT_FILE = "./SQL.txt"

Dim objCon
Dim objFs
Dim objFile

Call OpenDB()
Call ReadDB()
Call CloseDB()

Sub OpenDB()
Set objCon = WScript.CreateObject("ADODB.Connection")
objCon.Open ODBC_DSN,"",""
Set objFs = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFs.OpenTextFile(OUT_FILE, 2, True)
End Sub

Sub ReadDB()
Set rsDB = WScript.CreateObject("ADODB.Recordset")
strSql = "SELECT name FROM sys.databases WHERE name <> 'master' AND name <> 'tempdb' AND name <> 'model' AND name <> 'msdb'"
rsDB.Open strSql, objCon, 0, 1, 8
Do Until rsDB.EOF
Call ReadTable(rsDB("name"))
rsDB.MoveNext()
Loop
rsDB.Close
End Sub

Sub ReadTable(strDBName)
Set rsTable = WScript.CreateObject("ADODB.Recordset")
strSql = "USE " & strDBName & "; SELECT name, object_id FROM sys.tables"
rsTable.Open strSql, objCon, 0, 1, 8
Do Until rsTable.EOF
objFile.WriteLine "■" & rsTable("name")
Call ReadColumn(strDBName, rsTable("object_id"))
rsTable.MoveNext()
objFile.WriteLine ""
Loop
rsTable.Close
End Sub

Sub ReadColumn(strDBName, strTableID)
Set rsColumn = WScript.CreateObject("ADODB.Recordset")
strSql = "USE " & strDBName & ";"
strSql = strSql & " SELECT c.name ColumnName, t.name TypeName, c.length Length, c.isnullable IsNull, IsNull(d.definition, '') DefaultValue, IsNull(i.keyno, 0) KeyNo FROM syscolumns c"
strSql = strSql & " LEFT JOIN sys.types t ON c.xtype = t.user_type_id"
strSql = strSql & " LEFT JOIN sys.default_constraints d ON d.object_id = c.cdefault"
strSql = strSql & " LEFT JOIN sys.sysindexkeys i ON i.id = " & strTableID & " AND i.indid = 1 AND i.colid = c.colid"
strSql = strSql & " WHERE c.id = " & strTableID
strSql = strSql & " ORDER BY c.colid"
rsColumn.Open strSql, objCon, 0, 1, 8
Do Until rsColumn.EOF
strBuff = rsColumn("ColumnName") & "," & rsColumn("TypeName") & "," & rsColumn("TypeName") & "," & rsColumn("DefaultValue") & "," & rsColumn("IsNull") & "," & rsColumn("KeyNo")
objFile.WriteLine strBuff
rsColumn.MoveNext()
Loop
rsColumn.Close
End Sub

Sub CloseDB()
objCon.Close
objFile.Close
Set objCon = Nothing
Set objFile = Nothing
Set objFs = Nothing
End Sub

コメントの投稿

管理者にだけ表示を許可する

コメント



 
プロフィール
Author:OMEGAT
FC2ブログへようこそ!
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
FC2カウンター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
忍者AdMax
検索フォーム
カテゴリ
ブロとも申請フォーム

この人とブロともになる

amazonお奨め商品



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。