コメント |
BCP.EXE なので、MSDE( SQLServer ) のお話です。
もう、いまどきは MSDE という名前は無くなりましたが、古いシステムのお話
↓[[※コマンドプロンプトで実行するので、改行は本来ありません]]
@DIV
bcp.exe
db1..[テーブル名]
out "c:\TEMP\data.csv"
-c
-t \t
-r \0
-S server_name
-U user_name
-P
bcp.exe
db2..[テーブル名]
in "c:\TEMP\data.csv"
-e "c:\TEMP\error.log"
-c
-t \t
-r \0
-E
-S server_name\msde2000
-U sa
-P password
@END
作業としては、移行ではなくパックアップしたデータを復帰するテストです。
■ db1 は、7.0 の古い MSDE なので、sa にパスワードがありません。
■ データに改行が含まれるので、-r \0 で改行コードを指定しています。
■ 出力では必ずエラーログを出力するようにします( bcp は万能ではありません )
■ -E が INT IDENTITY 列を無視する設定です
移行側のテーブル定義は、SQL-DMO で出力して作成しています。
以下はそのコードで、$キーワード を文字列で置き換えて使っています。
@DIV
' **********************************************************
' 定義テキスト取得
' **********************************************************
Server = "$SERVER"
Db = "$DATABASE"
User = "$USER"
Pass = "$PASS"
ListTable = "$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
' **********************************************************
' テーブルオブジェクト
' **********************************************************
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 & "go" & vbCrLf
Wscript.Echo strDrop
Wscript.Echo objTable.Script()
Set objTable = Nothing
objTable = Empty
Next
on error goto 0
' **********************************************************
' 切断
' **********************************************************
Call objServer.DisConnect()
@END
http://msdn.microsoft.com/ja-jp/library/aa174646.aspx(BCP のパラメータに関する Microsoft のドキュメント)
@LINE
関連する http://winofsql.jp/(SQLの窓)へのドキュメントへのリンク
http://winofsql.jp/VA003334/dbaccess050907172814_050907173941.htm(自動採番列《SQLServer》)
関連する Microsoft のドキュメントへのリンク
http://msdn.microsoft.com/ja-jp/library/ms188365.aspx(BULK INSERT)
|