SQL Server 2005 Standard, Windows XP(SP3)を使用しています。
あるツールから生成されるCSVファイルのデータベースへのインポートしたいと考えています。

しかし、CSVファイル以下のようなフォーマットになっています。
(・・・番号)は無視してください

date,2009/05/27 (・・・1)
name,test (・・・2)

時刻,A,B,C,D,E,F (・・・3)
11:13:05,1,2,3,4,5,6   (・・・4)
11:13:06,7,8,9,10,11,12  (・・・5)
(以下4,5のようなデータが続く…)


となっています。
1は日付情報、2は特に意味無し、3はカラムの情報としたい物
4(以降)はデータとなっています。


データベースへは "|" をカラムの区切りとすると

時刻 |A|B|C|D |E |F |
2009/05/27 11:13:05|1|2|3|4 |5 |6 |
2009/05/27 11:13:06|7|8|9|10|11|12|
(・・・以降データが続く)

上記のように(3)をカラム情報にして、不必要な情報を省いた状態でデータを取り込みたいと考えております。

同じく上記の最初のフィールドのように、元データのdate情報を時刻情報と合わせてdatetime型として一つので取り込みたいと考えています。

この為には、文字列の操作が必要となってくると思いますが、SQL Server上ではこのような事はできるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

そういえば、前にサーバはSQL Server 2000で、クライアントPC側にはSSMSだけインストールされていると書かれていませんでしたか?



・ファイルはクライアントPC側にあって、サーバにあるテーブルにデータを入れたい
 (処理の「実行」は、クライアントPC側で行う)
・ファイルはサーバ側にはコピーできない
・VBなどで多少の加工処理は書いてもよい(これもサーバでは実行できない)

上記のような理解ですが、それならばもっとも適した方法は、
1)VBなどで、ファイルを読み込んで1行目の日付を抜き出しつつデータ行の先頭に追加して別ファイルに書き出す処理だけを書く
2)BCPでファイルをサーバ側のテーブルにアップロードする
 (BCPユーティリティは本来コマンドラインから実行するものです)
です。

xp_cmdshellについては、exeも実行できますが、セキュリティ上の問題があるので、サーバで実行するのは嫌がられることがあります。
クライアントPCにもデータベースエンジンがインストールされているならば、実行させられるでしょうが、
結局サーバ側のテーブルに入れるにはBCPかOPENROWSETでリンクサーバ経由INSERTのいずれかが必要です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
的確なアドバイスで本当に参考になります。

>そういえば、前にサーバはSQL Server 2000で、クライアントPC側にはSSMSだけインストールされていると書かれていませんでしたか?

その通りです。そこまで覚えていただいていて申し訳ありません。
(ツール面の機能統一をしたいので、2005に変更したいのですが当分先になりそうです。)

>・ファイルはクライアントPC側にあって、サーバにあるテーブルにデータを入れたい
 (処理の「実行」は、クライアントPC側で行う)
>・ファイルはサーバ側にはコピーできない
>・VBなどで多少の加工処理は書いてもよい(これもサーバでは実行できない)

これも把握されている通りです。
csvを生成するソフトを入れる許可が下りればサーバー側でファイルを持てるのですが…。

>それならばもっとも適した方法は、
>1)VBなどで、ファイルを読み込んで1行目の日付を抜き出しつつデータ行の先頭に追加して別ファイルに書き出す処理だけを書く
>2)BCPでファイルをサーバ側のテーブルにアップロードする

ご提案いただいた上記の方法でトライしてみようと思います。

ちなみに調べてみたのですがxp_cmdshellは2005からの機能みたいで、2000上では使えないようですね。

お礼日時:2009/05/29 09:06

補足です。



>ちなみに調べてみたのですがxp_cmdshellは2005からの機能みたいで、2000上では使えないようですね。

そんなことはありません。SQL Server 2000でも使えます。
http://msdn.microsoft.com/ja-jp/library/aa260689(SQL.80).aspx
むしろ、このストアドはテクノロジとしては古いです。
(xpはSQL Server 2000時代の拡張ストアドプロシージャのプレフィックスです。SQL Server 2005ではCLRが推奨されています)
    • good
    • 0

1) ストアドプロシージャを1本書く


 以下のいずれかの方法でワークテーブルに読み込む。
 ・BULK INSERT(カンマ区切り)
 ・OPENROWSET(BULK フォーマットファイル使用)
 ・xp_xmdshellによるBCP(カンマ区切り)
 1行目の日付を変数に取り込む。
 型変換して実テーブルにセットするときに時刻に日付をつないでINSERTする。

2) ストアドプロシージャを1本書く
 以下のいずれかの方法でワークテーブルに読み込む。
 ・BULK INSERT(デリミタなし)
 ・OPENROWSET(BULK)
 ・xp_xmdshellによるBCP(デリミタなし)
 1行目の日付を変数に取り込む。
 各行はコンマで切り出し、型変換して実テーブルにセットするときに時刻に日付をつないでINSERTする

3)SSISまたはDTSパッケージを作成する
 1からつくらなくても、データのインポートユーティリティからパッケージは生成できます。
 これにファイル先頭の日付を取り出す処理と、先頭列に日付を加える処理を追加します。

1)の方式は、先頭数行がデータ列ではなく、カンマの数が不足しているため、場合によってはうまく読み込めない
ケースがあります。
(行スキップオプションはありますが、カンマが不足していると行カウントが正しくされない)
2)の方式は、カンマで文字列を切り出す処理に少し工夫が必要です。
(CHARINDEXを使うか、XMLを使うか、スカラー関数を作るか)
3)は行スキップが正確に働くので、データ取り込み部分は設定がわかりやすいですが、追加する処理は多少勉強しないと設定できないでしょう。

なお、1)2)の方法はサーバ側に対象ファイルが存在する必要があります。
それぞれをとても説明しきれないので、キーワードでMSDNをあたってみてください。

この回答への補足

色々な方法を紹介していただいてありがとうございます。
1),2)はサーバーにデータがないとできないようですので、難しそうですが3)の方法を考えなくてはいけないかもしれません。

ただ、xp_cmdshellですがこれは外部で作成したexeを実行することが可能なようですが実際のところどうでしょうか?

このexeに文字列を整形する機能を持たせることもできるのかなと考えています。

補足日時:2009/05/29 00:01
    • good
    • 0

できるかできないかといえば、できます。



インポート先のテーブルが存在せず、CSVの内容に基づいて新規作成したいということであれば、SSIS(SQL Server Integration Service)を使って、パッケージを作成すれば可能です。

ストアドプロシージャを書く方法でもできなくはないですが、一旦ワークテーブルに取り込んで動的クエリでテーブルを作成する必要があるため、ちょっと厄介です。
(インポート先のテーブルが既に存在する前提ならば、もっと簡単です)

この回答への補足

ご回答ありがとうございます。
なるほどやはり何種類か実現手段があるのですね。

>(インポート先のテーブルが既に存在する前提ならば、もっと簡単です)

考えてみると確かにカラムの内容は固定になりますので、テーブルは存在していても問題ありませんね。
その場合どのような方法になるでしょうか?

補足日時:2009/05/27 23:11
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCSV形式のファイルを読み込んでテーブルに格納するには?(BULK INSERT、BCP、DTS)

VisualBasicのカテゴリでも質問したのですが、
こちらの方が回答がつく可能性が高いのではと思い、こちらにも書き込みました。

今、
"aaa","bbb","ccc" 
のような形で1レコードのCSVファイルがあります。
これをSQLServer2000上のテーブルに読込みたいのですが、
10件ほどの少ないレコードなら
各フィールドごとを変数に入れて読込み、
それをループさせてINSERT INTO すればよいのですが・・・。

大量の件数の場合時間がかかりすぎてしまいます。
それで、BULK INSERT、BCP、DTS などの利用を考えているのですが、

まず、何よりこの質問です。

(1)このようなファイル形式のものを上記の方法で読込めるのか?

実現可能なのかをまずお聞きしたいです。
どなたか、成功されている方はいらっしゃいますか?

(2)BCPでファイルのフォーマットを指定したファイルを用意して試みたところ、
""で区切られているため、その部分もフィールドに取り込まれてしまい、
binaryデータが切り詰められましたとなってしまいます。
この回避方法はないでしょうか?

(3)""が余計なので、これを変換して読込むことは可能ですか?
DTSはVisualBasic上からコマンドとして利用したいです。
batファイルを用意してもいいです。

困っています。どなたか助けてください。

VisualBasicのカテゴリでも質問したのですが、
こちらの方が回答がつく可能性が高いのではと思い、こちらにも書き込みました。

今、
"aaa","bbb","ccc" 
のような形で1レコードのCSVファイルがあります。
これをSQLServer2000上のテーブルに読込みたいのですが、
10件ほどの少ないレコードなら
各フィールドごとを変数に入れて読込み、
それをループさせてINSERT INTO すればよいのですが・・・。

大量の件数の場合時間がかかりすぎてしまいます。
それで、BULK INSERT、BCP、DTS などの利用を...続きを読む

Aベストアンサー

DTSインポートエクスポートウィザードを使用すれば、”を含むCSVファイルでもよ見込むことが出来ますよ。
[スタート]-[プログラム]-[Microsoft SQL Server]-[データのインポートとエクスポート]から呼び出すことも出来ます。

変換元(データのコピー元)にCSVファイル(データソース:Text File)を選択して、変換先に接続するSQLServerとデータベース名を指定して・・・
順次設定していけば、設定できますよ。
#最後にちゃんと保存してくださいね。

話は変わりますが、最初の質問から派生して関連する質問をするのであれば、ちゃんと最初の質問を終了してから新規の質問を作成してください。感じ悪いです。回答している人の気持ちを考えてください。

QCSVファイルをBULK INSERTでSQLserverに読み込むことは可能?

BULK INSERT というものを使って
SQLServer2000上のテーブルに読込みたいのですが可能でしょうか?

その場合どうやって記述すればよいのでしょうか?
終端文字とかいうのは何になるのでしょう?

Windows2000
RDOで接続です。

Aベストアンサー

””で区切られたファイルのインポートですが、BULK INSERTでは、”を含んでロードしてしまいます。ですので、BULK INSERT を使用する場合は”を削除してからロードしないと駄目です。

ところで、<www7.big.or.jp/~pinball/discus/sqls/index.html>でも質問をしているようですが、どのような環境で何がしたいのか状況がつかめません。

詳しく教えていただけませんか?

Qテーブル列数とデータファイル列数の違うbcpインサートをしたい

DBのテーブルの列数は258です。
インサートするデータファイルの列数は65です。
データファイルは","で区切られたファイルです。
SQL Serverは2005です。

コマンドを下記のように書きました。
SQLCMD -S"\SQLEXPRESS" -U"user" -P"pass" -d"計測" -Q"INSERT INTO [計測データ] SELECT 4,CONVERT(datetime,年月),データ1,データ2,データ3,データ4,データ5,・・・データ256 FROM OPENROWSET(BULK 'D:\200906.csv', FORMATFILE='D:\test.fmt',FIRSTROW = 2) x"

フォーマットファイルは、
8.0
68
1SQLCHAR01""0 Firsrt_QUOTE ""
2SQLCHAR020"\","1年月 ""
3SQLCHAR010","2データ1 ""
4SQLCHAR010","3データ2 ""
5SQLCHAR010","4データ3 ""
・・・
66SQLCHAR010"\r\n"65データ64 ""

しかしエラーになってしまいます。
そもそも列数が違うと無理なのでしょうか。

DBのテーブルの列数は258です。
インサートするデータファイルの列数は65です。
データファイルは","で区切られたファイルです。
SQL Serverは2005です。

コマンドを下記のように書きました。
SQLCMD -S"\SQLEXPRESS" -U"user" -P"pass" -d"計測" -Q"INSERT INTO [計測データ] SELECT 4,CONVERT(datetime,年月),データ1,データ2,データ3,データ4,データ5,・・・データ256 FROM OPENROWSET(BULK 'D:\200906.csv', FORMATFILE='D:\test.fmt',FIRSTROW = 2) x"

フォーマットファイルは、
8.0
68
1SQ...続きを読む

Aベストアンサー

bcpとsqlcmdによるOPENROWSETの実行は別物です。
同じようなことはできますが、まずは区別して認識しましょう。

OPENROWSETは、ファイルをテーブルに見立ててSELECTする方法です。
だから書いているクエリも"INSERT INTO ~ SELECT ~"です。
列数の少ないテーブルAから列数の多いテーブルBにINSERTするとき、どうしていますか?

INSERT INTO テーブルA
(列1,列2,列3,...,列10)
SELECT 列1,列2,列3,....,列10 FROM テーブルB

って書きますよね?
やっているのは全く同じことです。

QEXISTSを使ったDELETE文

「SELECT文の件数」と、
「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。

【SELECT文】※2件返ってきます。
SELECT
  a.部署コード,
  a.社員コード
FROM
  社員マスタ a,
  組織マスタ b
WHERE
  a.部署コード = b.部署コード


【DELETE文】※50件 DELETEされます。
DELETE TABLE
  社員マスタ
WHERE
  EXISTS
  (
  SELECT
    a.部署コード,
    a.社員コード
  FROM
    社員マスタ a,
    組織マスタ b
  WHERE
    a.部署コード = b.部署コード
  )


環境はSQLSERVER2005です。
件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。

宜しくお願いします。

Aベストアンサー

EXISTS 句は、副問い合わせが行を返した場合 TRUE そうでない場合 FALSE と評価されます。

例示いただいた副問い合わせは TRUE を返すので DELETE されます。

詳細については、SQLの入門書を参考にしてください。

QBULKINSERTのWITHオプションについて

SQLserver 2005 Expressを使用してます。

csvをBULKINSERTでインポートする際にcsvの最終行に終了コードのようなデータが
入っていてインポートに失敗します。
BULKINSERTのWITHオプションのLASTROWの引数に変数を使用して
日々行数の変化するcsvの最終行-1の値をセットしたいのですが構文エラーに
なります。どのように記述したらいいのでしょうか?

試した事は

test.csv
1,あ,4200
2,い,5300
. ← 何かのデータ

CREATE PROCEDURE [dbo].[test1]
AS
bulk insert test_table
from 'C:\test.csv'
with
(firstrow = 1,formatfile = 'C:\Import_Fmt.xml')

で実行するとエラー「一括読み込み: データ ファイルで予期しないファイルの終了が検出されました。」になるので、最終行の「.」が原因かと思い。

ALTER PROCEDURE [dbo].[test1]
AS
bulk insert test_table
from 'C:\test.csv'
with
(firstrow = 1,lastrow = 2,formatfile = 'C:\Import_Fmt.xml')

で実行するとエラー無くインポートされました。

実際のcsvは行数10000件はあり日々増減しますので毎回手作業で数えることは難しいです。
そこで一度仮テーブルを作り改行コードまでを一つのカラムにインポートして
行数をカウントし、変数にセットしてLASTROWの引数に渡そうとして

ALTER PROCEDURE [dbo].[test1]
AS
declare @maxseq as int

drop table test2
create table test2(F1 varchar(max))

bulk insert test2
from 'C:\test.csv'
with
(firstrow = 1,formatfile = 'C:\ImportOrg_Fmt2.xml')

set @maxseq = (select count([F1]) from test2)
--ここにreturn @maxseqを記述して以降を削除して実行し、ストアドを実行したら
      --取り込んだcsvの行数が表示されました。
bulk insert test_table
from 'C:\data\test.csv'
with
(firstrow = 1,lastrow = @maxseq -1 ,formatfile = 'C:\ImportOrg_Fmt.xml')
と記述して実行すると
メッセージ 102、レベル 15、状態 1、プロシージャ test1、行 23
'@maxdeq' 付近に不適切な構文があります。
となりました。
どのように記述したら構文エラーにならずに実行できるかご回答をよろしくお願いします。

SQLserver 2005 Expressを使用してます。

csvをBULKINSERTでインポートする際にcsvの最終行に終了コードのようなデータが
入っていてインポートに失敗します。
BULKINSERTのWITHオプションのLASTROWの引数に変数を使用して
日々行数の変化するcsvの最終行-1の値をセットしたいのですが構文エラーに
なります。どのように記述したらいいのでしょうか?

試した事は

test.csv
1,あ,4200
2,い,5300
. ← 何かのデータ

CREATE PROCEDURE [dbo].[test1]
AS
bulk insert test_table
from 'C:\test.csv'
wi...続きを読む

Aベストアンサー

試してないけど
set @maxseq = @maxseq - 1;
bulk insert test_table
from 'C:\data\test.csv'
with
(firstrow = 1,lastrow = @maxseq,formatfile = 'C:\ImportOrg_Fmt.xml');
でうまくいくような気がする。

それでだめなら
declare cmdstr as varchar(2000);
set @maxseq = @maxseq - 1;
set cmdstr =
'bulk insert test_table
from ''C:\data\test.csv''
with
(firstrow = 1,lastrow = ' + @maxseq + ',formatfile = ''C:\ImportOrg_Fmt.xml'')';
exec (cmdstr);
といった感じで書く。
execは
http://msdn.microsoft.com/ja-jp/library/ms188332.aspx
参照。

QBCPでCSV内の文字列をテーブルのDatetime型カラムに取り込む方法

BCPを使用してCSVをテーブルに取込みたいのですが、
CSV内に日付形式の文字列(YYYY/MM/DD)があり、
取込先のテーブルの型はDatetimeになっています。
フォーマットファイルのデータ型は「SYBCHAR」
で設定しているのですが、いざ取込もうとすると、
以下のようなエラーが出てうまく取込めません。

SQLState = 22008, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver]日付の形式が正しくありません。

フォーマットファイルの設定が悪いのでしょうか?
なんとか回避する方法はないでしょうか。

Aベストアンサー

日付形式がYYYY-MM-DDなら取り込めます。
事前に/を-に置換しないといけませんが・・
<フォーマットファイル>
7.0
1
1 SQLCHAR 0 10 "\r\n" 1 dt

置換しない方法だと
日付フィールドがvarcharとしたテンポラリー用のテーブルを用意してそこにBCPでインポートする。
インポート完了後、本番テーブルに日付フィールドをコンバートしてインサートすればいけると思います。

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

Qストアドプロシージャでcsvファイルへデータにエクスポート

いつも勉強させていただいています。
ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。

SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。
以下作成したストアドプロシージャです。
*******************************************
CREATE PROCEDURE [ストプロ名]
AS
DECLARE @command VARCHAR(200)
BEGIN
SET
@command = ' bcp [データベース名].[スキーマ].[テーブル]
out C:\XXXX\aaa.txt -PXXXXXX -UXXXXXX -SXXXXXX'
EXECUTE master.dbo.xp_cmdshell @command
END
****************************************
解析ボタン、実行ボタンをクリックしてもエラーは出ません。
「ストアドプロシージャの実行」を選択して実行させても、
アラーは表示されず、ファイルも作成されません。
xp_cmdshell が有効になるように設定もしました。

残念ながら検討すらつかない状態です。ぜひご教授お願いします。

いつも勉強させていただいています。
ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。

SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。
以下作成したストアドプロシージャです。
*******************************************
CREATE PROCEDURE [ストプロ名]
AS
DECLARE @command VARCHAR(200)
BEGIN
SET
@command = ' bcp [データベース名].[スキーマ].[テーブル]
out C:\XXXX\aaa.tx...続きを読む

Aベストアンサー

まず、@command に入れている内容をコマンドプロンプトで実行した場合は、ちゃんと出力されていますか?

あと、、、
「C:\XXXX\aaa.txt」のファイルの有無は、SQL Servereが入ってるサーバー内を確認してますか?

私は昔、自分のローカルにできると勘違いしていた事があるもので。。。

QSELECT 文 GROUP での1件目を取得

非常に初歩的な事で恐縮ですが、
以下のデータを抽出するsql文の書き方を模索しています。
環境:SQLSERVER2005

| 列1| 列2 |
+---+---+
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
| 2 | F |
| 2 | G |
| 2 | H |
| 3 | X |
| 3 | Y |
| 3 | Z |

上記のテーブルがあるとします。
列1でグループした値で、1レコード目の列2を抽出したいのです。
出力結果としては、

列1列2
+--+--+
1,A
2,F
C,X

としたいのです。
列1でGROUPしてしまうと列2の内容を集約しないといけないので困っています。
ご教授いたけないでしょうか?

Aベストアンサー

SQL Server 2005では、Oracleでいう分析関数が実装されています。

select
列名1,
列名2
from
(select
rank() over(partition by 列1 order by 列2) as rk,
列1,列2
from 表名) as x
where rk=1

QSQLServer2005 データのCSVファイルでエクスポート

SQLServer2005を使用しています。
テーブルのデータをCSVファイルでエクスポートしたいのですが
ネットで調べてもどうもうまくいかないので質問させてください。

サーバー名:PCSQL、ユーザ名:User、パスワード:PASS
として以下のようなプログラムを実行したのですが、
--------------------------
EXEC master..xp_cmdshell 'bcp "select * from データベース名.dbo.テーブルA"
queryout c:\log.csv -c -t"," -r"\n" -SPCSQL -UUser -PPASS'
--------------------------

以下のような結果が出てくるだけでCSVファイルが作成されません。

使用法: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m 最大エラー数] [-f フォーマット ファイル] [-e エラー ファイル]
[-F 先頭行] [-L 最終行] [-b バッチ サイズ]
[-n ネイティブ型] [-c 文字型] [-w UNICODE 文字型]
[-N text 以外のネイティブ型を保持] [-V ファイル フォーマットのバージョン] [-q 引用符で囲まれた識別子]
[-C コード ページ指定子] [-t フィールド ターミネータ] [-r 行ターミネータ]
[-i 入力ファイル] [-o 出力ファイル] [-a パケット サイズ]
[-S サーバー名] [-U ユーザー名] [-P パスワード]
[-T 信頼関係接続] [-v バージョン] [-R 地域別設定有効]
[-k NULL 値を保持] [-E ID 値を保持]
[-h "読み込みヒント"] [-x XML フォーマット ファイルを生成]
NULL

そもそもSQLにはWindows認証でログインしているので
ユーザーIDとかいらないのでしょうか?(ユーザーID,PASSを抜いても同じ結果となってしまいますが・)

SQL初心者で申し訳ないのですがご教授宜しくお願いします。

SQLServer2005を使用しています。
テーブルのデータをCSVファイルでエクスポートしたいのですが
ネットで調べてもどうもうまくいかないので質問させてください。

サーバー名:PCSQL、ユーザ名:User、パスワード:PASS
として以下のようなプログラムを実行したのですが、
--------------------------
EXEC master..xp_cmdshell 'bcp "select * from データベース名.dbo.テーブルA"
queryout c:\log.csv -c -t"," -r"\n" -SPCSQL -UUser -PPASS'
--------------------------

以下のような結果が出て...続きを読む

Aベストアンサー

bcpというのはもともとコマンドラインから実行するユーティリティです。
クエリアナライザからxp_cmdshellで実行すると、バッチコマンドとしてbcpが実行され、今のクエリアナライザの接続とは別にSQL Serverに接続しようとします。
それがうまくいっていないのですが。

対象のSQL Serverは別マシンにあるんですか?
もしそうなら、サーバでマシン名を「localhost」にしても同じことになりますか?

SSMSから接続するときもPCSQLという名前で接続していますか?
PCSQLはSQL Server認証も許可されていますか?

実際のサーバ名は「PCSQL\AAA」のように「\」マークがついているということはありますか?
コマンドラインから「cliconfg」と打って開くユーティリティの別名タブに何か登録してありますか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報