既存のテーブル構成を他のDBにコピーしたいことがあります。
そんなとき、Microsoft SQL Server Management Studioで、データベースを右クリック→タスク→スクリプトの生成
で全テーブルのCREATE文を含むファイルを作成できます。
スポンサーリンク
また、テーブルを右クリック→テーブルをスクリプト化から、テーブルごとにファイルを作成することもできます。
今回は、VB.netでデータベース名、テーブル名を指定するだけで、既存のテーブルのCREATE文を取得するコードを紹介します。
まずは、参照設定で、Microsoft.SqlServer.SMOとMicrosoft.SqlServer.ConnectionInfoを追加します。
サンプルコードは以下です。
Dim sqlServer As New Microsoft.SqlServer.Management.Smo.Server
'SQL server Express Editionを利用しているのでこうしました。
sqlServer.ConnectionContext.ServerInstance = "localhost\SQLEXPRESS"
'Windows認証の場合はこれで良いです。
sqlServer.ConnectionContext.LoginSecure = True
'SQL Server認証の場合は次のようにします。
'sqlServer.ConnectionContext.LoginSecure = False
'sqlServer.ConnectionContext.Login = "ユーザーID"
'sqlServer.ConnectionContext.Password = "パスワード"
Dim dbA As Microsoft.SqlServer.Management.Smo.Database
dbA = New Microsoft.SqlServer.Management.Smo.Database()
dbA = sqlServer.Databases("データベース名")
Dim sbA As Text.StringBuilder
Dim soA As Microsoft.SqlServer.Management.Smo.ScriptingOptions
sbA = New Text.StringBuilder()
soA = New Microsoft.SqlServer.Management.Smo.ScriptingOptions()
soA.ClusteredIndexes = True
soA.Default = True
soA.DriAll = True
soA.Indexes = True
soA.IncludeHeaders = True
Dim tblA As Microsoft.SqlServer.Management.Smo.Table
tblA = dbA.Tables("テーブル名")
Dim scA As Specialized.StringCollection
scA = tblA.Script(soA)
Dim sStr As String
'CREATE文を取得します。
Dim sCreateSQL As String
For Each sStr In scA
If sStr <> "" Then
If sStr.StartsWith("CREATE TABLE") Then
sCreateSQL = sStr
Exit For
End If
End If
Next
CREATE TABLE文以外にも、CREATE INDEXやALTER TABLEの文がある場合があるので、それらは何らかの処理をする必要があります。