SQLの窓

2009年10月26日


VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する

概要

有償版の 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の最新記事】
posted by lightbox at 2009-10-26 00:38 | SQLExpress | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり