データをエクスポート
基本的な使い方は以下の通り
タブ区切りでテーブルのレコードがすべて出力されます。
bcp [DB名].dbo.[テーブル名] out "[出力先ファイル名]" -S [インスタンス名] -U [ユーザID] -P [パスワード]
例)
SET dbName=TestDB
SET tableName=TestTable
SET filePath=%~dp0TestFile.csv
SET instanceName=TestInstance
SET userId=sa
SET password=Password
bcp %dbName%.dbo.%tableName% out "%filePath%" -S %instanceName% -U %userId% -P %password%
[[PAUSE]]
queryoutを使用すればクエリの実行結果をファイルに出力できます。
SQLを複数行記載する場合は以下の点に注意します。
- 「^」で「"」や「()」をエスケープ
- 「^」で複数行を結合
- 「%」で「%」をエスケープ
例)
SET dbName=TestDB
SET tableName=TestTable
SET filePath=%~dp0TestFile.csv
SET instanceName=TestInstance
SET userId=sa
SET password=Password
bcp ^"^
USE %dbName%^
DECLARE @TableName NVARCHAR^(50^)^
SET @TableName='%tableName%'^
DECLARE @TmpTbl TABLE^(^
ColumnName NVARCHAR^(50^)^)^
INSERT INTO @TmpTbl^
SELECT col.name^
FROM sys.columns AS col^
LEFT OUTER JOIN sys.objects AS obj^
ON col.object_id = obj.object_id^
WHERE ^(obj.type = 'U'^)^
AND ^(obj.name = @TableName^)^
AND col.name NOT LIKE '%%Time'^
ORDER BY col.name^
DECLARE @ColumnName NVARCHAR^(50^)^
DECLARE @SQL NVARCHAR^(MAX^)^
SET @SQL = ''^
WHILE EXISTS ^(SELECT * FROM @TmpTbl^) BEGIN ^
SELECT TOP 1 @ColumnName = ColumnName^
FROM @TmpTbl^
ORDER BY ColumnName^
DELETE FROM @TmpTbl^
WHERE ColumnName = @ColumnName^
SET @SQL = @SQL + @ColumnName^
IF EXISTS ^(SELECT * FROM @TmpTbl^) BEGIN^
SET @SQL = @SQL + ','^
END^
END^
SET @SQL = 'SELECT ' + @SQL + ' FROM ' + @TableName + ' ORDER BY ' + @SQL^
EXECUTE^(@SQL^)^"^
queryout "%filePath%" -S %instanceName% -U %userId% -P %password%
データをインポート
bcp [DB名].dbo.[テーブル名] in "[読み込み元ファイル名]" -S [インスタンス名] -U [ユーザID] -P [パスワード]
例)
SET dbName=TestDB
SET tableName=TestTable
SET filePath=%~dp0TestFile.csv
SET instanceName=TestInstance
SET userId=sa
SET password=Password
IF EXIST "%filePath%" (
sqlcmd -Q "DELETE FROM %dbName%.dbo.%tableName%" -S %instanceName% -U %userId% -P %password%
bcp %dbName%.dbo.%tableName% in "%filePath%" -S %instanceName% -U %userId% -P %password%
)
最終更新:2014年07月29日 23:55