OSQLからスクリプトファイルへの引数の渡し方

このQ&Aのポイント
  • バッチファイルを使用してOSQLからスクリプトファイルへ引数を渡す方法について教えてください。
  • 具体的には、バッチファイルを実行時に入力された日付をOSQL文の中に記述しているスクリプトファイルへ渡し、スクリプトファイルにあるSQL文を実行する方法を知りたいです。
  • また、バッチからOSQLへの引数の渡し方や、その他の良い方法があれば教えてください。
回答を見る
  • ベストアンサー

OSQLからスクリプトファイルへの引数の渡し方

こんにちは。 OSQLからの値の渡し方について教えて下さい。 バッチファイルの中にOSQL文を使用してデータを抽出する事を考えています。 具体的には、バッチファイルを実行時に日付を入力し、 入力された日付をOSQL文の中に記述しているスクリプトファイルへ値を渡し、 スクリプトファイルにあるSQL文を実行するというやり方です。 **バッチファイル** set /p %hiduke = "日付を入力して下さい。yyyymmdd -->" osql -S インスタンス -U ユーザ名 -P パスワード -d DB名 -i c:\script.sql > C:\結果.txt **スクリプトファイル(script.sqlファイル)** declare @hiduke char(8) set @hiduke = バッチから渡された値を指定 select * from uriage where 日付 = @hiduke という風な感じで考えています。 バッチからOSQLへの渡し方と、OSQLからスクリプトファイルへの渡し方、 その他、良い案があれば教えて頂けないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQL Server 2005のsqlcmdであれば、-vオプションでスクリプトファイルに値は渡せますが、osqlでは難しいんじゃなかったかなと思います。 そうすると、-Qオプションを使うしかないので、選択肢は2つです。 1)-QオプションにSELECT文を使う osql -S インスタンス -U ユーザ名 -P パスワード -d DB名 -Q"SELECT * FROM uriage WHERE 日付='%hidulk%'" 2)ストアドプロシージャを1つ書いて、それを実行する CREATE PROCEDURE ap_selecturiage (@hiduke varchar(8)) AS BEGIN SET NOCOUNT ON SELECT * FROM uriage where 日付=@hiduke END osql -S インスタンス -U ユーザ名 -P パスワード -d DB名 -Q"EXEC ap_selecturiage '%hiduke%'" 後者のメリットは実行前に型チェックができることと、複雑なクエリでも実行可能なことですかね。

naka5322
質問者

お礼

お礼が遅くなり申し訳ありません。 やっぱりスクリプトへ値を渡すことはできないんですね。 ストアドは事情により作成できない為、1)案で検討させて頂きます。 ありがとうございました。

関連するQ&A

  • OSQLの起動について

    SQLの絵本という本にそってSQLを勉強しようと思いこの本の通りにまずMSDE2000(Microsoft SQL Server 2000 Desktop Engine)をインストールして開始したんですが、コマンドプロンとでOSQLの起動をしようとしたところ、 C:\Documents and Settings\Owner>C:\MSDERelA\setup.exe SECURITYMODE=SQL SAPWD="eh on" C:\Documents and Settings\Owner>cd c:\ C:\>osql -U sa -P ehon 'osql' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 となってしまうのですが、どうしたらいいのでしょう? アドバイスお願い致します。

  • osqlからのsql実行方法について

    Windows20003のSQL Server2000の環境で、あるテーブルのインデックスを指定して統計情報を更新する処理のバッチ化を考えており、osqlを使用すれば可能な所までは調査出来たのですが、、、 osqlから、SQL文をオプション"Q"にて実行する場合、例えばテーブル名 or インデックス名に「~」等の特殊文字を含む場合、そのまま実行するとシンタックスエラーとなり実行出来ませんでした。 テーブル名 or インデックス名に「~」等の特殊文字を含む場合の実行方法をどなたか御教授御願い出来ないでしょうか。。。 因みに、オプション"i"でsqlファイルを作成して実行しても、sql文に特殊文字があった場合はシンタックスエラーとなりました。 Query Analyzerでは、インデックス名を「"」囲み実行すれば、正常に処理される事は確認済みです。 【実行方法】 osql -E -S <サーバ名> -d <DB名> -Q "UPDATE STATISTICS <テーブル名> <インデックス名> WITH FULLSCAN"

  • PLSQL キーボード入力値を引数で渡す方法

    OracleのPL/SQLで promptコマンドを使用して キーボードから日付の入力を受け付けるプログラムがあり、 SQLplusから実行しています。 このプログラムをキーボードからではなく バッチやスクリプトから日付を指定して実行する方法がわかりません。 わかる方がいれば教えてください。 PL/SQLのプログラム自体は変更をしないという要件の為 バッチやスクリプトから引数として渡せないか検討しています。

  • FTPのバッチファイルで日付を引数で与えたい

    いつもお世話になっております。 FTPのバッチファイルに引数を与える良い方法をご存知ありませんか。 FTPの中では環境変数は使えないとのことですし、悩んでいます。 取得するファイルは日付毎のディレクトリに入っていて、取得後も日付毎のディレクトリに保管するので日付の指定が必要なのですが。 [ftpget.bat]------------------------------------------ ftp-s:ftpget.bat open ホスト名 ユーザー名 パスワード bin prompt cd /~対象ホストのディレクトリ~/YYYYMMDD/host1 !mkdir C:\YYYYMMDD lcd C:\YYYYMMDD mget *.txt quit ---------------------------------------------------- このYYYYMMDDの部分を、『ftpget.bat 20081125』のようにバッチを流す時の引数で与えたいです。 日付は3日前だったり昨日だったり今日だったりします。 今は直接ファイルを編集してYYYYMMDDの部分3箇所を手で直してからバッチファイルを叩いています。 よろしくお願いいたします。

  • SqlServerのスクリプト実行について

    Windows2003ServerにてSqlServer2005をバッチファイルから実行する時について質問させてください。 下記の「sql.bat」にて「script.sql」を実行した場合、「log.txt」に出力される内容は'222'をアップデートした結果「(x行処理されました)」のみが出力されますが、'000'や'111'を更新した結果も出力させたい場合、「script.sql」を3分割し、「sql.bat」で3ファイル実行するしかないのでしょうか。 「sql.bat」 sqlcmd -S SERVERNAME -d SCHEMANAME -i c:\script.sql -o c:\log.txt 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' update tablename set data1 = 'bbb' where data1 = '111' update tablename set data1 = 'ccc' where data1 = '222'

  • 現在時刻を取得してファイル名にする

    いつもお世話になっています。 コマンドプロンプトから処理を実行し、その結果をログファイルとして残すバッチファイルを作成しています。 ログファイルを日付で管理したいので、ファイル名を "バッチファイル名_yyyymmdd.LOG"としたいのですが この"yyyymmdd"の部分で詰まってしまいました。 set NowDate=%date% set FileName=C:\temp\sample_%NowDate% としてみましたが、NowDateが"月 2003/07/28"となり、"/"のために ファイルが作成されませんでした。 %time%も":"が入ってしまうため、同様に作成されません。 バッチファイル内でyyyymmddを毎回記述し直せば楽なのでしょうが、 最終的にはタスクスケジュールに入れてしまいたいのでそれもできません。 どうしたら現在日をファイル名にすることができるのでしょうか? 御存知の方、教えてください。

  • MSDEについて

    お世話になります。MSDE初心者です。 MSDE(ACCESS)を使用しています。 テーブルを作成するのに、バッチファイルで 作成する必要があるのですが、 作り方がわかりません。 コマンドプロンプトでバッチファイルを実行すると MSDEにログインをして「1>」まで表示されるのですが、 CREATE文まで発動しません。 内容としては以下のとおりになってます。 [ファイル名] db.bat [ファイルの内容] cd c:\ osql -U id -P pass use sampledb CREATE TABLE T_ORDER( 以下クリエイト文) 以上となってます。 また、クリエイト文を外部ファイル(create.sql)として cd c:\ osql -U id -P pass -Q C:\create.sqlで実行すると 「行1:'\'の近くに無効な構文があります」 と表示され、実行できません。 なにぶん初心者なので、ご説明に至らない点もあると思いますが、よろしくお願いします。

  • クエリの結果をCSV形式で抽出するには

    お世話になります。 SQL SERVER 2000 で質問させてください。 クエリ(SELECT文)の結果をCSV形式のファイルに落としたいのですが、バッチファイル(osqlでクエリ実行)からクエリを実行して、指定したディレクトリにCSVファイルを作成する方法を教えてください。 よろしくお願いします。

  • ACCESSからSQLスクリプトを実行する方法

    SQL Serverのスクリプト生成で作成した複数のSQLスクリプトファイル(.sql)を ACCESSからSQL Serverに接続して実行したいのですが どのようにすれば出来るでしょうか? バッチを使えば出来そうですが、今回はACCESSのみで実現できればと思っています。 ※ACCESS2003とSQL Server2000を使用しています。 よろしくお願いします。

  • バッチでの応答キー記載方法

    しょうも無い質問で申し訳ないです^^; 下記バッチファイルを実行しバックアップのタスクを作成しているのですが、実行中、 『E:\ggg\061014は受け取り側のファイル名ですか、またはディレクトリ名ですか(F= ファイル、D= ディレクトリ)?』 と表示されるところで止まってしまいます。 ここでは"D"を入力して先へ進むようにするようにするにはどうしたら良いのでしょうか? またなぜかデスクトップに日付名フォルダが出来てしまいます。(中身は空です)それもできないようにしたいのですが、どこが間違っているのかわかりません。ご教授願います。 <バッチファイル> set ymdtmp=%DATE:/=% set yyyymmdd=%ymdtmp:~2% cd e:\aaa md %yyyymmdd% xcopy /s /e /v c:\ddd\eee\*.* e:\ggg\%yyyymmdd%