• ベストアンサー
  • 困ってます

プロシージャの引数について

DB : SQL Server 2005 プロシージャの引数にCSVファイルのフルパスを入れたいのですが、 エラーが出て困っています。 http://questionbox.jp.msn.com/qa262720.html ↑の回答も参考にしましたが、どうしても出来ません。 最初は以下のように書いていました。 BULK INSERT IDATA from ''+ @pass + '' with ( fieldterminator = ',', rowterminator = '\n' ) このときは、プロシージャを作る段階で↓のエラーメッセージが出ました。 >メッセージ 1038、レベル 15、状態 1、プロシージャ sss、行 30 オブジェクト名または列名がないか、空です。SELECT INTO ステートメントの場合は、各列に名前が付いていることを確認してください。その他のステートメントの場合は、空の別名を検索してください。"" または [] で定義された別名は許可されません。別名として、名前または 1 つのスペースを追加してください。 >メッセージ 319、レベル 15、状態 1、プロシージャ sss、行 30 キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 句の場合、前のステートメントをセミコロンで終了してください。 また、上記の回答を参考にしたところ、プロシージャは作成できましたが、 引数を与えて実行する段階で↓のエラーメッセージが出ました。 >メッセージ 203、レベル 16、状態 2、プロシージャ sss、行 32 名前 'BULK INSERT IDATA from '\\・・・\・・・\取込.csv' with ( fieldterminator = ',',rowterminator = '\n')' は有効な識別子ではありません。 引数で与えるのでなく、直接入力した場合は出来ます。 よろしくお願いします (><)

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

似たような事をしてますね(笑) DECLARE @SQL varchar(max) SET @SQL = 'BULK INSERT IDATA from '''+ @pass + ''' with ( fieldterminator = '','', rowterminator = ''\n'' )' EXEC (@SQL) ですかね 一度EXECの行を PRINT @sql に変えてマネージメントスタジオのストアド実行でSQL構文を表示してその構文が思った構文になっているか確かめて見ると良いです PS. もしかしてpassはpathなのかな?(笑)

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

質問者からのお礼

ありがとうございます! 出来ました!! 同じようなことを自分でも書いていたんですけどねー・・・ なにかが足りなかったんでしょうか(^^; 本当にありがとうございます。 あ、passはpathのつもりでした(汗 スペルミスです(>_<)

関連するQ&A

  • 【 困 】 ストアドプロシージャ

    OS:WIN2000 DB:SQLServer2000 下記のストアドプロシージャを作成しました。 BULK INSERTを使っています。 引数でCSVファイルのパスを渡そうとしています。 「エラー170:行5: '@Query'の近くに無効な構文があります。」 というエラーになってしまいます。 5行目にあるFromの次に変数を書くには、どうしたらいいのでしょうか? CREATE proc SP_BULK_INSERT @Query char(100) AS BULK INSERT T_顧客マスタ FROM @Query WITH (FIELDTERMINATOR = ',') GO

  • 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' ) 解決策を教えてください。

  • 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ファイルのインポートはできたのですが、ファイルの削除が未だにできません。 このあとテキストファイルをこのプロシージャ内で削除するにはどうすればよいでしょうか。

  • BULK INSERTについて

    CSVをバルクインサートでitemテーブルにBULK INSERTする際に、 下記のようなSQL文を使っているのですが、CSV内のブランク文字は 実行後にNULLになってしまいます。 やりたいことはNULLではなく空白文字("")にしたいのですが、 下記のSQL文をどのように変えればよいのでしょうか。 または、CSVを変更する方法でもよいです。 BULK INSERT item FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 大変お手数ですが、 わかる方がいらっしゃいましたらよろしくお願いいたします。

  • 文字列の長さを指定して BULK INSERT するには?

    20,1899-12-3020,1899-12-3020,1899-12-3020,1899-12-30 このような文字列がファイルにあるのですが、 1899-12-30 の部分を、文字数10と指定して データを取り出すことは可能でしょうか? この場合のデータは年齢と生年月日です。 BULK INSERT INTO [BIRTHDAY] FROM 'C:\sql\birthday.txt' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '')

  • BULKINSERTの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' 付近に不適切な構文があります。 となりました。 どのように記述したら構文エラーにならずに実行できるかご回答をよろしくお願いします。

  • Wordで『プロシージャの呼び出し、または引数が不正です。』

    Wordがいつの間にか正常に起動しなくなりました。 起動すると、 >実行時エラー '5': >プロシージャの呼び出し、または引数が不正です。 というエラーメッセージが出て、メニューバー、ツールバーが全く表示されない状態で立ち上がります。 とりあえずエラーメッセージで検索などしてみて、オフィスの削除、再インストールなども試してみましたが改善しませんでした。また、WORDフォルダの中のSTARTUPフォルダの中身を削除するという方法が書いてあるページがありましたので、それも確認しましたが、特に何も入っていませんでした。 どなたか原因と対策をご存知の方、いらっしゃいませんでしょうか。 OSはWindowsMe、Wordのバージョンは2000です。 よろしくお願いいたします。

  • SQLServer・ストアドプロシージャでファイル出力したい

    こんにちは、いつもお世話になります。 今回はじめてストアドプロシージャというものをプログラムしているのですが、デバッグの方法がよくわかりません。 したい処理は練習として「あるテーブルのデータを検索し、その結果をCSVに出力する」という簡単なものなのですが、クエリアナライザで実行すると「コマンドは正常に終了しました。」というメッセージが出ているにもかかわらず出力されるべきテキストファイルはまったく存在しません。 そこでクエリアナライザのオブジェクトブラウザから該当ストアドプロシージャを選択し、右クリックのメニューで出てくる「デバッグ」という機能を試してみたのですが、そうすると以下のエラーメッセージが出てきました。 ODBC: メッセージ 0、レベル 16、状態 1 [Microsoft][ODBC SQL Server Driver][SQL Server]DLL mssdi98.dll がロードできないか、参照している DLL の 1 つがロードできません。理由 : 126(指定されたモジュールが見つかりません。)。 ・・・意味が良くわからない上に、何行目でエラーになっているのかもわかりません。ためしにある変数に値をセットする一行目以外すべてコメントにして実行してみたのですが、同じメッセージが表示されます。 ・・・おそらく、ストアドプロシージャを実行する前から何らかの理由でエラーになっていると思うのですがこの現象についておわかりの方いませんでしょうか?

  • VB6 エラー「プロシージャの呼び出し、または引数が不正です。」につい

    VB6 エラー「プロシージャの呼び出し、または引数が不正です。」について いつもお世話になっております。 早速ですが、Form_Activateイベント内でこのエラーが出力されていることを 確認いたしました。 ただし、フォームアクティブ時に自動的に流れる時はエラーは出力されず、 明示的にForm_Activateイベント呼び出して動かす時にだけ出ています。 そこで質問です。 (1)Form_Activateイベントを明示的に呼び出すことはプログラム上問題がありますか? (2)Form_Activateイベントでこのエラーが発生する事例などがあれば教えてください。 (3)画面がアクティブになった際にForm_Activateイベントを明示的に呼び出した場合、  エラーが起こる事はありますか? (4)Form_Activateイベント内に限らず、このエラーが出る事例などがあればお教えください。 始めたばかりで低レベルな質問でもうしわけありませんが、よろしくお願いします。

  • エラー5:プロシージャの呼出しまたは引数が不正です

    お世話になります。 以前解決しました http://okwave.jp/qa/q7131441.html の回答の下の方に .add type:=xlvalidatelist, formula1:=left(s, len(s)-1) とありますが これがよく理解できません。いくつか調べた後の素人考えで 「入力規則に検索済ファイル名の左から文字数-1」?かな?と。 マクロを実行するとこの行が原因で"時々"エラー5を返します。 「プロシージャの呼出しまたは引数が不正です」。 必ずではないのですが7割程度の確立で出ます。 上記の説明だけでエラーが理解できましたら対処案をご教示ください。 ちなみにエクセル2002と2003で確認しています。