SQLServer テーブル定義の取得
テーブル定義情報を取得してCSVに出力する
テーブル定義 取得用 SQL
lesson002.sql
select
c.table_name
, c.ordinal_position
, c.column_name
, c.data_type
, c.character_maximum_length
, c.numeric_precision
, c.numeric_precision_radix
, c.numeric_scale
, c.is_nullable
, c.column_default
, p.constraint_type
from
information_schema.columns c
left outer join
(
select
k.table_catalog
, k.table_schema
, k.table_name
, k.column_name
, t.constraint_type
from
information_schema.key_column_usage k
inner join
information_schema.table_constraints t
on
( t.constraint_name = k.constraint_name )
where
( t.constraint_type = 'primary key' )
)
p
on
( c.table_catalog = p.table_catalog )
and ( c.table_schema = p.table_schema )
and ( c.table_name = p.table_name )
and ( c.column_name = p.column_name )
order by
c.table_name
, c.ordinal_position
接続文字列
lesson002.con
DRIVER={SQL Server};SERVER=xxxxxx;DataBase=adventureworks;UID=yyyyyy;PWD=zzzzzz;
CSV出力用スクリプト
lesson002.vbs
Option Explicit Private fs Set fs = CreateObject("Scripting.FileSystemObject") '接続文字列 読み込み Private tsCon Set tsCon = fs.OpenTextFile(WScript.Arguments(0)) Private sCon sCon = "" If Not tsCon.AtEndOfStream Then sCon = tsCon.ReadLine End If tsCon.Close Set tsCon = Nothing '接続 Private con Set con = CreateObject("ADODB.Connection") With con .Provider = "SQLOLEDB" .ConnectionString = sCon .Open End With 'SQL 読み込み Private tsSql Set tsSql = fs.OpenTextFile(WScript.Arguments(1)) Private sSql sSql = "" Do Until tsSql.AtEndOfStream sSql = sSql & tsSql.ReadLine & vbNewLine Loop tsSql.Close Set tsSql = Nothing '結果を CSV に保存 Private tsCsv Set tsCsv = fs.OpenTextFile(WScript.Arguments(2), 2, True) '2 = ForWriting Dim rs Set rs = CreateObject("ADODB.Recordset") With rs .ActiveConnection = con .CursorType = 0 'adOpenForwardOnly .LockType = 1 'adLockReadOnly .Source = sSql .Open End With If Not rs.EOF Then Dim i For i = 0 To rs.Fields.Count - 1 tsCsv.Write rs.Fields(i).Name & "," Next tsCsv.WriteLine "" Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 tsCsv.Write """" & rs.Fields(i).Value & """," Next tsCsv.WriteLine "" rs.MoveNext Loop End If rs.Close tsCsv.Close Set tsCsv = Nothing Set fs = Nothing '切断 con.Close Set con = Nothing
実行形式
C:\>cscript c:\study\vbscript\chapter006\lesson002.vbs c:\study\vbscript\chapte
r006\lesson002.con c:\study\vbscript\chapter006\lesson002.sql c:\study\vbscript\
chapter006\lesson002.csv //nologo
出力結果
lesson002.csv
table_name,ordinal_position,column_name,data_type,character_maximum_length,numeric_precision,numeric_precision_radix,numeric_scale,is_nullable,column_default,constraint_type,
"Address","1","AddressID","int","","10","10","0","NO","","PRIMARY KEY",
"Address","2","AddressLine1","nvarchar","60","","","","NO","","",
"Address","3","AddressLine2","nvarchar","60","","","","YES","","",
"Address","4","City","nvarchar","30","","","","NO","","",
"Address","5","StateProvinceID","int","","10","10","0","NO","","",
"Address","6","PostalCode","nvarchar","15","","","","NO","","",
"Address","7","rowguid","uniqueidentifier","","","","","NO","(newid())","",
"Address","8","ModifiedDate","datetime","","","","","NO","(getdate())","",
"AddressType","1","AddressTypeID","int","","10","10","0","NO","","PRIMARY KEY",
"AddressType","2","Name","nvarchar","50","","","","NO","","",