概要 有償版の SQLServer ならばこんな苦労はしなくてもいいはずですが、SQL-DMO はこれ以外にも有用な処理がたくさんあるので、使えるにこした事はありません。 バックアップやリストアは、SQL から実行したほうが便利なので BCP と共に最も良く使う SQL-DMO の処理だと思います
if exists(select * from sysobjects where name = '商品マスタ' and type = 'U') drop table 商品マスタ ; CREATE TABLE [商品マスタ] ( [商品コード] [varchar] (4) COLLATE Japanese_CI_AS NOT NULL , [商品名] [nvarchar] (50) COLLATE Japanese_CI_AS NULL , [在庫評価単価] [int] NULL , [販売単価] [int] NULL , [商品分類] [varchar] (3) COLLATE Japanese_CI_AS NULL , [商品区分] [varchar] (1) COLLATE Japanese_CI_AS NULL , [作成日] [datetime] NULL , [更新日] [datetime] NULL , PRIMARY KEY CLUSTERED ( [商品コード] ) ON [PRIMARY] ) ON [PRIMARY] ;
これは、出力した結果ですが if 文と削除のところは自前で作成しています。SQLExpress( SQLServer )のSQL実行は、セミコロンで文を区切って一度に実行できるので、上記 SQL は一回の呼び出しで実行可能です 関連する記事 PHP : SQLExpress(SQLServer) : SQL-DMO(COM) による CSV 出力
Set Fso = CreateObject( "Scripting.FileSystemObject" ) ' **************************************** ' 定義テキスト取得 ' **************************************** Server = "NIGHT_TCP" ' 別名 Db = "lightbox" User = "sa" Pass = "passwordpassword" ListTable = "社員マスタ,商品マスタ,得意先マスタ" List = Split( ListTable, "," ) Dim objServer,objDatabase,objTable ' **************************************** ' オブジェクト作成 ' **************************************** on error resume next Set objServer = CreateObject("SQLDMO.SQLServer") if Err.Number <> 0 then Wscript.Echo "SQL-DMO はインストールされていません" Wscript.Quit end if on error goto 0 ' **************************************** ' 接続 ' **************************************** on error resume next Call objServer.Connect( Server, User, Pass ) if Err.Number <> 0 then Wscript.Echo "接続に失敗しました [" & Err.Description & "]" Wscript.Quit end if on error goto 0 ' **************************************** ' データーベースオブジェクト取得 ' **************************************** on error resume next Set objDatabase = objServer.Databases(Db) if Err.Number <> 0 then Wscript.Echo Err.Description Wscript.Quit end if on error goto 0 ' **************************************** ' テキストファイル ' **************************************** Set OutObj = Fso.OpenTextFile( "create_script.sql", 2, True ) ' **************************************** ' テーブルオブジェクト ' **************************************** on error resume next For i = 0 to Ubound( List ) Set objTable = objDatabase.Tables(List(i)) if Err.Number <> 0 then Wscript.Echo Err.Description Wscript.Quit end if strDrop = "if exists(select * from sysobjects where name = '" strDrop = strDrop & objTable.Name & "'" & " and type = 'U')" & vbCrLf strDrop = strDrop & " drop table " & objTable.Name & vbCrLf strDrop = strDrop & ";" & vbCrLf OutObj.Write strDrop OutObj.Write Replace( objTable.Script() & "", "GO", ";" ) & vbCrLf Next on error goto 0 OutObj.Close() ' **************************************** ' 切断 ' **************************************** Call objServer.DisConnect()
|
【SQLExpressの最新記事】
- SQLServer の BCP で INT IDENTITY 列に csv からリストアする
- VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )
- Microsoft SQLExpress : sa に空のパスワードを設定する方法
- SQLExpress バッチ DB バックアップ
- C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ
- 各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle
- SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )
- SQLServer(SQLExpress) : SQL学習用販売管理データとインポート用スクリプト
- SQLExpress 2005( および 2008 ) の接続設定
- SQLExpress 内に存在する表の CREATE 文を取得する
- ファイルから直接データベースを別のPCでリストアする / SQLExpress
- 目的のDBが使用している物理ファイルのパスの確認 / SQLExpress
- ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです
- SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました
- VBS : SQLServerよりExcel へエクスポート(Excel製品は必要ありません)
- SQLServer のドキュメント
- PHP : SQLExpress(SQLserver) : COM による接続処理
- PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新
- ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新
- VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理