バッチでSQLServerに接続し、テーブルの件数によって処理を分岐させたいです。
まず、前提として日次で処理が行われます。
最新のデータだけにしたいため、前日取り込んだデータをtruncateしてcsvファイルのデータを取り込みます。
しかし、csvファイルに不備があって正常に取り込めなかった場合、truncateまでは実行してしまうため、テーブルの中身が空になってしまいます。
上記のような事態が発生した場合の回避策を考えております。
batchで実行するため、トランザクションを切るのが難しいかと思いました。
そのため、一度、一時物理テーブルにデータを格納し、正しく取り込めた(件数が1件以上あれば正常取り込みとする)場合は、本当に取り込みたいテーブルに再度同じcsvを取り込もうと思いましたが、件数が1件以上あるかの判断が出来ません。
以下のコマンドだと
call sqlcmd -S %SERVER% -E -i %SQLFilename% -v InputFileNameS=%InputF% FormatFileNameS=%FormatF% TableNameS=%TableN% DatabaseNameS=%DATABASENAME% >> %LogFilename%
このような結果が返ってきます。
LogFilenameにはファイルパスが格納してあり、そのファイルに出力されてしまいます。
----------- 10 (1 行処理されました)
実際に使いたいのは「10」だけなのでcount結果を引数として渡したいのですが、可能でしょうか。
他にもっと簡単に回避できる策があったら教えてください。
バージョンは
Microsoft SQL Server 2017 - 14.0.3045.24 (X64)
です。
よろしくお願い致します。
追記
call sqlcmd -S %SERVER% -E -i %SQLFilename% -v InputFileNameS=%InputF% FormatFileNameS=%FormatF% TableNameS=%TableN% DatabaseNameS=%DATABASENAME% >> %LogFilename% pause call sqlcmd -S %SERVER% -E -d %DATABASENAME% -Q "EXIT(SELECT COUNT(*) FROM %TableN%)" echo %errorlevel% pause
上記のような処理を組み込んでみましたが %errorlevel% に件数以外も表示されてしまうに見えます。
以下のように表示されます。
続行するには何かキーを押してください . . . ----------- 16883 (1 行処理されました) 0 続行するには何かキーを押してください . . .
記述が間違えていますでしょうか。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/12 02:49
2019/06/12 12:21 編集
2019/06/12 08:37