- - PR -
ストアドプロシージャでの環境変数の取得について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-06-02 15:23
SQLServer2000のストアドプロシージャにてOSの環境変数(TEMP)を取得
したいのですが、取得の方法がわかりません。 分かられる方、宜しくお願いします。 | ||||
|
投稿日時: 2005-06-02 16:59
sp_configureって使えますかねぇ?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_sp_ca-cz_0put.asp | ||||
|
投稿日時: 2005-06-02 17:02
ストアドプロシージャからサーバーOSのテンポラリフォルダを取得する要件とはどのようなものでしょうか?
例えば,フラットファイルのデータインポート/エクスポートなどの用件でしたら, bcp ユーティリティを経由して, bcp dbname.dbo.table out/in %temp%test.txt 〜 のように,コマンドライン上で環境変数を使用することができます。 これを xp_cmdshell でキックするストアドプロシージャを作成する。というようなことはできます。(セキュリティ上の問題がありますが) また,DTS (Data Transformation Services)であれば, ActiveX スクリプトや動的プロパティテスク を利用することによって,環境変数に直接アクセスすることも可能です。 T-SQL のみを利用したストアドプロシージャですと,非常に厳しいと思います。 要件によって,ストアド以外の方法を検討されてはいかがでしょうか? | ||||
|
投稿日時: 2005-06-02 18:44
sp_configure は SQL Server の設定変数を取得/設定 するためのものですから, OSの環境変数はとれませんねぇ。 コネクションの最大数やスレッド最大数などを設定することができます。 | ||||
|
投稿日時: 2005-06-02 18:57
夏椰さん、TLCさん返信ありがとうございます。
処理内容としては、bcpを使用して出力したテキストファイルをBLUK INSERTで一括書き込みを 行う処理でbcpでの出力先にTEMPフォルダを使用しBLUK INSERTのファイルパスにも使用 したいと考えています。 とりあえず、xp_cmdshellを使っての取得を考えていますが、outputの情報を変数に取得する にはどうすればいいのでしょうか? ちなみに以下のようにやってみたのですが、成功と失敗の戻り値しか取得できないみたいですね EXEC @TEMP = master..xp_cmdshell 'echo %TEMP% 宜しくお願いします。 | ||||
|
投稿日時: 2005-06-02 19:14
まず, xp_cmdshell は,シェルを呼び出しているだけですので,これはプロセスの実行ステータスの数値情報しか返しません。 そして, HIRO さんの要件ですが, 1.一括出力 2.一括入力 をOSのテンポラリパス経由で行えればよいということですので, 入力も出力も bcp で行えばよいと思います。 ストアドプロシージャ内に TEMP の値をストアする必要がありません。 master..xp_cmdshell 'bcp tableA out %temp%\filename.txt 〜' master..xp_cmdshell 'bcp tableB in %temp%\filename.txt 〜' と順番に実行すれば実装できます。 Bulk Insert の T-SQL 文で列のマッピングなどをしている場合は,フォーマットファイルを用意して対応してください。 | ||||
|
投稿日時: 2005-06-02 19:33
確かにその通りですね。環境変数をストアしない方法で考えて見ます。 ありがとうございました。 | ||||
|
投稿日時: 2005-06-03 01:56
xp_cmdshellって、コマンドの実行結果を結果セットとして取得可能なはず。 出力1行を1列1レコードとして。 先日 dirコマンドの実行結果を取得するスクリプト書いたばっかなので、原理的には同じですよね? | ||||
