概要 有償版の 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) 接続と通常処理






