1

既存のbatファイルを拡張して、実行期間をSQLServerテーブルに記録したいと思います。現在のbatファイルには、コマンドラインユーティリティを呼び出す1行があります。

私はこのようなもの、WindowsバッチファイルのSQLステートメントを活用すると思いました。擬似コード:

StartTime = Now()
hyperioncommandlineshell.cmd /a:parm1 /b:parm2 /c:parm3
sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values (Current_Timestamp, 'MyProcess', Now() - StartTime)" -W    

いくつかの質問:

  1. このbatファイルが実行されているサーバーにはSQLツールがありません。この投稿から、インストールが必要であることがわかります(sqlcmd.exeファイルをコピーするだけでは不十分です)。これは抵抗に遭遇します。ソフトウェアをインストールせずにバッチファイルからSQLステートメントを実行する別の方法はありますか?

  2. BATファイルの経験がありません。誰かがプロセスの期間を取得する方法(開始時間を取得し、終了時に差を計算するなど)に関するガイダンスを提供できますか?

おそらく、使い慣れた別のツールを使用してみますが、変更が1つの既存のオブジェクトにのみ影響し、追加のオブジェクトを必要としないように、これをbatで実行しようとしています。

4

1 に答える 1

1

WindowsコンピューターにはODBCドライバーが既にインストールされているため、SQLServer用のODBCドライバーを使用している可能性があります。osqlその場合、DOSからT-SQLステートメントを実行するためのMicrosoftのユーティリティを入手できる可能性があります。これがMSDNのドキュメントです:

http://msdn.microsoft.com/en-us/library/aa214012(v=SQL.80).aspx

これはSQLServer2000用に設計されているため、SQL Serverの新しいバージョンへの接続に問題が発生する可能性がありますが、試してみる価値はあります。それが機能する場合は、SQLサーバーに接続するために特別なものをインストールする必要はありません(ただし、サーバーのODBCデータソース名を作成する必要がある場合があります...)。Windows Vista +から、[スタート]をクリックし、「 ODBC 」と入力して、ODBCデータソースエディターを開きます。

を使用SQLCMDするには、ネイティブクライアント、または少なくともSNACをインストールする必要があります(ディスカッションスレッド:http://us.generation-nt.com/answer/how-install-only-sqlcmd-exe-utility-help-87134732.html) Native Client全体をインストールせずに単純に実行SQLCMDする(ただし、SNACをインストールする必要があります)。SNACのことは聞いたことがないので、少し調査が必要です。何でもインストールすると同じ抵抗が発生すると思います。その抵抗を克服できるのであれば、ネイティブクライアントをインストールするのがおそらく最善の策です。

経過時間は。を使用%DATE% %TIME%して、現在の日付/時刻を取得できます。したがって、次のようなものを使用して、開始時刻をキャプチャし、プロセスを実行してから終了時刻をキャプチャすることができます。これらはすべてデータベースに投稿されます。

set StartTime=%DATE% %TIME%
hyperioncommandlineshell.cmd /a:parm1 /b:parm2 /c:parm3
set EndTime=%DATE% %TIME%
sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values ('%StartTime%', 'MyProcess', '%EndTime%')" -W 

DOS自体で計算を行うことはできませんがStartTime - EndTime、SQLを使用して、開始時刻と終了時刻の両方をテーブルに格納できます。

%DATE%およびの形式%TIME%は、マシンが使用するように設定されている形式に基づいています。DOSプロンプトで入力echo %DATE% %TIME%して、どのようにフォーマットされているかを確認できます。varcharフォーマットが自動的に値に変換されない場合があるため、これらの値をフィールドに格納する必要がある可能性がありdatetimeます。自動的に変換される場合は、次のようにDOSからSQLステートメントで計算を行うことができます。

sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values ('%EndTime%' - '%StartTime%', 'MyProcess')" -W

(参考までに-すべての例で擬似コードを使用したため、何もテストされていません。)

于 2012-12-07T18:02:50.017 に答える