ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
BCP.EXE で自動採番列(INT IDENTITY)を持つデータの移行
日時: 2009/04/01 11:47
名前: lightbox



BCP.EXE なので、MSDE( SQLServer ) のお話です。
もう、いまどきは MSDE という名前は無くなりましたが、古いシステムのお話

  ↓※コマンドプロンプトで実行するので、改行は本来ありません
拡張子:
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
作業としては、移行ではなくパックアップしたデータを復帰するテストです。 ■ db1 は、7.0 の古い MSDE なので、sa にパスワードがありません。 ■ データに改行が含まれるので、-r \0 で改行コードを指定しています。 ■ 出力では必ずエラーログを出力するようにします( bcp は万能ではありません ) ■ -E が INT IDENTITY 列を無視する設定です 移行側のテーブル定義は、SQL-DMO で出力して作成しています。 以下はそのコードで、$キーワード を文字列で置き換えて使っています。
拡張子:
' **********************************************************
' 定義テキスト取得
' **********************************************************

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()
BCP のパラメータに関する Microsoft のドキュメント
関連する SQLの窓へのドキュメントへのリンク 自動採番列《SQLServer》 関連する Microsoft のドキュメントへのリンク BULK INSERT
メンテナンス


日時: 2009/04/01 11:47
名前: lightbox