会社行きたくなかったんです。

自由になりたくて会社辞めました

SQL Server

VB.net:SQL serverで既存のテーブルのCREATE文を取得する方法

投稿日:

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

-SQL Server

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.