【 テーブルの扱い 】

1. テーブル一覧
2. テーブル定義のテキストファイル出力
3. BCP 入出力

コレクションの操作
  • テーブル一覧は、単純なコレクションの列挙です。いかし、後述の処理
    と組み合わせれば効率的な管理が可能です


  • <SCRIPT language="VBScript">
     
    ' **********************************************************
    ' テーブル一覧
    ' **********************************************************
    Function AllTable()
     
    	' オブジェクト作成
    	Set objServer = CreateObject("SQLDMO.SQLServer")
     
    	' 接続
    	Call objServer.Connect( "localhost", "sa", "" )
     
    	Set objDatabase = objServer.Databases("lightbox")
    	Set objTables = objDatabase.Tables
     
    	' 一覧作成
    	document.all("TableList").length = 0
    	For Each curTable in objTables
    		document.all("TableList").length = _
    			document.all("TableList").length + 1
    		if curTable.SystemObject then
    			document.all("TableList").options( _
    				document.all("TableList").length - 1 ).text = _
    				curTable.Name & " [system]"
    		else
    			document.all("TableList").options( _
    				document.all("TableList").length - 1 ).text = _
    				curTable.Name
    		end if
    	Next
     
    	' 切断
    	Call objServer.DisConnect()
     
    	Set objServer = Nothing
     
    End Function
     
    </SCRIPT>
    <HTML>
    <HEAD>
    <META http-equiv="Content-type" content="text/html; charset=Shift_JIS">
    </HEAD>
    <BODY id=Main>
    テーブル一覧
    <BR>
    <SELECT name="TableList" size=12 style='width:400'></SELECT>
    <BR>
    <INPUT type=button value="一覧作成" onClick='Call AllTable()'>
     
    </BODY></HTML>
    

    CREATE TABLE 文 + α
  • 出力内容に、osql の GO コマンドも出力されるので、一括処理用として
    利用する事もできます


  • <SCRIPT language="VBScript">
     
    Const SQLDMOScript_AppendToFile = 256
    Const SQLDMOScript_Drops = 1
    Const SQLDMOScript_PrimaryObject = 4
     
    ' **********************************************************
    ' CREATE TABLE SQL 作成
    ' **********************************************************
    Function DoScript()
     
    	' オブジェクト作成
    	Set objServer = CreateObject("SQLDMO.SQLServer")
     
    	' 接続
    	Call objServer.Connect( "localhost", "sa", "" )
     
    	Set objDatabase = objServer.Databases("lightbox")
    	Set objTable = objDatabase.Tables( "[商品マスタ]" )
    	' 作成
     
    	Flg = SQLDMOScript_Drops or SQLDMOScript_PrimaryObject
    	strText = objTable.Script( Flg, document.all("ScriptPath").value )
    	alert(strText)
     
    	' 切断
    	Call objServer.DisConnect()
     
    	Set objBackup = Nothing
    	Set objServer = Nothing
     
    ' SQLDMOScript_AppendToFile を指定すると、テキストファイルに追加されます
     
    End Function
     
    </SCRIPT>
    <HTML>
    <HEAD>
    <META http-equiv="Content-type" content="text/html; charset=Shift_JIS">
    </HEAD>
    <BODY id=Main>
    スクリプトのパス
    <INPUT type=text name="ScriptPath" size=80 value="D:\TEMP\商品マスタ.SQL">
    <INPUT type=button value="SQL作成" onClick='Call DoScript()'>
     
    </BODY></HTML>
    


  • 出力結果は以下のようになります

  • if exists (select * from sysobjects where id = object_id(N'商品マスタ') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [商品マスタ]
    GO
     
    CREATE TABLE [商品マスタ] (
    	[コード] [varchar] (4) NOT NULL ,
    	[商品名] [varchar] (50) NULL ,
    	[単価] [int] NULL ,
    	 PRIMARY KEY  CLUSTERED 
    	(
    		[コード]
    	)  ON [PRIMARY] 
    )
    GO
     
    

    BulkCopy
  • SQLServer ではおなじみの BCP ですが、スクリプトから実行ができます


  • <SCRIPT language="VBScript">
     
    Const SQLDMODataFile_CommaDelimitedChar = 1
     
    ' **********************************************************
    ' CSV 出力
    ' **********************************************************
    Function DoBcpExport()
     
    	' オブジェクト作成
    	Set objServer = CreateObject("SQLDMO.SQLServer")
    	Set objBcp = CreateObject("SQLDMO.BulkCopy")
     
    	' BCP パラメータセット
    	objBcp.DataFileType = SQLDMODataFile_CommaDelimitedChar
    	objBcp.DataFilePath = document.all("DataPath").value
     
    	' 接続
    	Call objServer.Connect( "localhost", "sa", "" )
     
    	Set objDatabase = objServer.Databases("lightbox")
    	Set objTable = objDatabase.Tables( "[商品マスタ]" )
     
    	' 作成
    	nRow = objTable.ExportData( objBcp )
    '	nRow = objTable.ImportData( objBcp )
    	alert( nRow )
     
    	' 切断
    	Call objServer.DisConnect()
     
    	Set objBackup = Nothing
    	Set objServer = Nothing
     
    ' ExportData の逆は ImportData です
     
    End Function
     
    </SCRIPT>
    <HTML>
    <HEAD>
    <META http-equiv="Content-type" content="text/html; charset=Shift_JIS">
    </HEAD>
    <BODY id=Main>
    スクリプトのパス
    <INPUT type=text name="DataPath" size=80 value="D:\TEMP\商品マスタ.CSV">
    <INPUT type=button value="SQL作成" onClick='Call DoBcpExport()'>
     
    </BODY></HTML>
    


  • DataFileType は以下のようになります
  •   Constant Name Value
    1
    SQLDMODataFile_CommaDelimitedChar
    1
    2
    SQLDMODataFile_NativeFormat
    4
    3
    SQLDMODataFile_SpecialDelimitedChar
    3
    4
    SQLDMODataFile_TabDelimitedChar
    2
    5
    SQLDMODataFile_UseFormatFile
    5


  • NativeFormat は、SQLServer 独自のバイナリフォーマットです

  • SpecialDelimitedChar は、ColumnDelimiter と RowDelimiter プロパティを適用する時に使用します

  • UseFormatFile は、フォーマットファイルを使用して詳細な定義情報を元に実行します
    ( フォーマットファイルは特定の構成を持つタブ区切りされたテキストファイルです )

  • フォーマットファイルについては、Books Online のキーワード、フォーマット ファイルで知る事ができます