• 締切済み
  • 困ってます

SQL ServerにCSVをインポート

SQL Server Express 2012にCSVファイルのデータをインポートさせたいと思っています。 SQL Server のデータのうち、主キーはdate型、その他はbit型、nvarchar型です。 SQL Serverのテーブルのデータには、#2013-01-01#, #False#, "あいう"などというデータがあります。 CSVは、Event.csvというデータです。 インポートするにあたって、BULK INSERTを利用しようとしています。 上記のデータで下記のコードをSQL Server Managemant Studio Expressで実行するとエラーとなります。 FROM 'D:\Business\Data\Event.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); データを別の文字列にするべきなのか、#で日付やブール値を囲わない方がよいのか、あるいはカラム名の入ったCSVを用意するべきなのかなど、疑問が多いのですが、実際はどうあるべきなのでしょうか。 なお、上記のデータはもともとExcel のデータをVBAを使ってCSVファイルに出力したものなので、CSVの形式を別の状態のデータに変換することはできます。 もともとの目的は、ExcelのデータをSQL Serverのデータにインポートしたいだけです。 よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • SQL Server
  • 回答数1
  • 閲覧数2723
  • ありがとう数8

みんなの回答

  • 回答No.1

CSV形式とは何か一応説明しておきます。CSV形式はレコードを改行で区切り、フィールドをカンマで区切るのが基本です。この場合問題となるのはデータに改行やカンマが含まれる場合です、この場合は二重引用符でデータを囲みます、尚、二重引用符がデータ中に有る場合は2個連続にして対応します。したがって、両端に#を付ける方法はCSV形式ではありません。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • SQL SERVERの BULK INSERT

    SQL SERVERの BULK INSERTについて。 TESTというテーブルにtest.csvをBULK INSERTによりデータをインポートしようとしているのですが変数を使わずに下記のように書くと正常に動くのですが、 BULK INSERT TEST FROM 'C:\data\test.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 変数を使って下記のようにすると「不適切な構文があります。」とエラーとなってしまいます。 DECLARE @data varchar(100) SET @data = 'C:\data\test.csv' BULK INSERT TEST FROM @data WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 解決策を教えてください。

  • aspファイルにcsvインポートのSQLを書きたい

    お世話になります。 当方サーバー管理初心者です。 社内イントラ内に古いaspファイルで構成されたイントラサイトがあります。 そのイントラサイト内のあるaspファイルの中に、ボタンがあり、ボタンをクリックしてインポートしたいCSVを指定し、 登録ボタンを押してCSVをインポートすると、社内にあるSQLサーバーにアクセスし、データを追加したいテーブルに CSV内のデータを追加したいのですが、その際のaspファイル内に記載する SQLコマンドはどのようになるのでしょうか? Insert Into データを追加したいテーブル名 Values ( 以降に何を入れたら良いかわかりません。 不足な情報があれば加筆修正いたします。 どうぞよろしくお願いいたします。

  • MS-SQLプロシージャでファイルを削除したい

    お世話になります。 SQL Server 2005のプロシージャにて テーブルの削除→CSVファイルの取り込み→CSVファイルの削除を行いたいと思っております。 ALTER PROCEDURE [dbo].[テーブル削除+インポート+ファイル削除] AS begin DELETE FROM dbo.テーブル BULK INSERT テーブル FROM 'テキストファイル' WITH (DATAFILETYPE='char', FIELDTERMINATOR=',',ROWTERMINATOR='\n') end ここで、テーブル削除とCSVファイルのインポートはできたのですが、ファイルの削除が未だにできません。 このあとテキストファイルをこのプロシージャ内で削除するにはどうすればよいでしょうか。

  • SQLサーバーにcsv.ファイルをインポート

    ACCESSデータベースをSQLサーバーへアップサイジングに挑戦しています。 csvファイルの取り込みについて質問させてください。 Accessでは、 DoCmd.TransferText acImportDelim, "○○インポート定義", "○○データ読込", filepath として、インポートしていました。 アップサイズ後、同じようにインポート定義を設定しようと思ったのですが、 ウイザードで設定できないのです。( 設定ボタンがグレーアウトしている。) それで、インポート定義なしでやってみたところ、 文字列フィールドで"00001"の表記が、すべて0が消えて"1"になってしまいます。 インポート後のテーブルのデータ型も、nvarcherになっているのですが・・ 正しいデータ型でインポートするにはどうすればよいでしょうか? よろしくお願いいたします。

  • CSVファイルのインポートについて

    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上ではこのような事はできるのでしょうか?

  • SQLサーバ2000へのインポート方法とその他

    こんにちは。 SQLサーバはまったくよく分からないですが、いくつか教えていただく助かります。 業務では下記のように、メインフレームから生データ(CSVファイル)をWindows2000へFTPし、SQLサーバへインポートし、その後ストアドプロシージャを実行します。 条件としては、メインフレームから不定期にFTPがおこなわれ、つづいてFTPが終了したことを通知するためのREXEC処理がコールされます。 メインフレーム ↓ Windows2000 ↓ SQLサーバ この時の具体的なテクニックを教えてほしいのですが、経験のない私のイメージはVBなどでADOを使ってファイルをインポートし、SQLサーバ内のストアドを実行するという感じです。 ↓ (1)メインフレームからファイルFTP(PUT) (2)メインフレームからVBで作成したモジュールを起動。 (3)VBはCSVファイルをDBにインポート (4)そしてVBからストアドプロシージャを実行(これは可能?) 現在はどのような仕組やツールが一般的なのでしょうか? 詳細に教えていただけると助かります。 よろしくお願いします。

  • SQL Server 2000 - bulk insert

    SQL Server 2000でのbulk insert とはどういうものなのでしょうか? csvなどをテーブルに一括で更新できてしまうものでイメージはよいのでしょうか?csvにヘッダーがある場合除くなどもできたりするのでしょうか? できれば、具体的なコマンドの書き方もご教示ください。 よろしくお願いします。

  • SQL serverへのインポートについて

    SQL Serverのデータベースを別のPCに移行する必要が出て、Excelファイルにエクスポートしたのですが、新しいPCへのインポートでエラーになってしまいます。 【旧PC】 Windows XP (エディションは不明)+SQL Server 2008 【新PC】 Windows 7 professional + SQL Server 2014 Express ※技術習得を兼ねているためとりあえず無料版を使用 詳細は以下の通りです。 ○手順 1.【旧】からExcelへエクスポート  ・[データマッピングの確認画面]で"失敗した可能性のあるcharからVarCharへの変換"と表示。  ・Excelファイルを確認した限りだと、値そのものは正しくエクスポートされている。 2.【旧】のデータベースをスクリプト化 3.【新】のコマンドラインで2.のスクリプトを実行(sqlcmd)  ・データベースの構成が正しく移行されている事は確認済み。 4.Excelから【新】へインポート ○結果  複数のテーブルで変換エラーが発生し、処理を停止。 ○補足事項 ・フラットファイルにエクスポートすると、正しくインポートされる。  (但し手順1と同じ画面で同じ警告が表示される) 最初はエクスポート時の警告を疑ったのですが、フラットファイルからは正しくインポートできたので、それが原因では無さそうです。ただそれだと手間なので、どうにかしてExcel経由で移行したいと思っています。

  • SQL Serverのデータ格納場所

    SQL Serverのデータ格納場所 Visual Studioを勉強しだしました。データベースのところで、mdfファイル、ndfファイルという言葉が出てきました。 ネットで色々調べていますが、いまいちわからないのでお教えください。 参考にしたURL: http://itpro.nikkeibp.co.jp/article/COLUMN/20070201/260338/ ■mdfファイルとはSQL Server Express Editionのデータベースデータファイルとあります。 Express Editionではない、SQL Server 2012 Standardなどのデータベースは違う拡張子のデータベースファイルになるのでしょうか? もしそうなら、何故Express Edtionと有料バージョンではデータの持ち方が違うのでしょうか? ■mdfファイルを違うパソコンで開きたいとします。Accessみたいに、ファイルをコピーして別PCに持って行けばファイルはひらけるものなのでしょうか? ■mdfファイルのデータをAccessにインポートできるのもなのでしょうか? 当方、Accessがわかる程度で、その他のデータベース関連のソフトウェアはさわったこともありません・・・ 宜しくお願い致します。

  • [SQL Server] コマンドプロンプトからのCSV形式出力

    SQL ServerのテーブルデータをSELECTしてダブルコーテ区切りのCSVに出力したいと考えております。 ・batファイルからの起動を希望。 ・出力CSVファイル名はbatファイルより引数で指定したい。 ・出力後、DELETEも行いたい。 OracleだとSQL*Plus環境で下記のようにテキストレベルで簡単にできます。 SQL Serverでも同様のことができないでしょうか? 要は下記をSQL Server版でやりたいということです。 参考:Oracleだと・・・ 同一dirに、abc.batとabc.sqlを用意しabc.batを実行すると20070601.csvが生成される。 1.abc.bat rem ----abc.bat-ここから---- sqlplus usr/pwd@host @abc.sql 20070601.csv rem ----abc.bat-ここまで---- 2.abc.sql ----ファイル名=abc.sql-ここから--- set echo off set heading off SET VERIFY OFF set FEEDBACK OFF set TRIMSPOOL on set termout off set pagesize 0 set linesize 32767 spool &1 select '"'|| カラム1 ||'",'|| '"'|| カラム2 ||'",'|| '"'|| カラム3 ||'"' from テーブル1; spool off delete from テーブル1; exit ----ファイル名=abc.sql-ここまで--- 20070601.csv結果 -ファイル名=20070601.csv-ここから--- "20060726","scott","356160" "20060727","tiger","463391" "20060728","manager","1930" -ファイル名=20070601.csv-ここまで--- DBサーバ環境 OS:Win2003SvrR2 SQL Serverバージョン:わかりません。(2003にのってるので最近のだと思われます) Oracle経験者でSQLServer初心者です。マニュアルもなく、Web検索しても「SQL」「Server」ってなかなかうまくひっかからない!! ので質問あげさせていただきます。