既存のテーブル構成を他の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の文がある場合があるので、それらは何らかの処理をする必要があります。