2020年8月24日星期一

SQLServer: Execute Sql files by sqlcmd

 sqlcmd  -?   For Help Infomration

C:\Users\xxx>sqlcmd -?
Microsoft(R) SQL Server Command Line Tool
Version 12.0.2000.8 NT
Copyright(C) 2014 Microsoft. All rights reserved.
使用法: Sqlcmd         [-U ログイン ID]       [-P パスワード]
  [-S サーバー]        [-H ホスト名]          [-E セキュリティ接続]
  [-N 暗号化接続]      [-C サーバー証明書を信頼]
  [-d データベース名]  [-l ログイン タイムアウト] [-t クエリ タイムアウト]
  [-h ヘッダー]        [-s 列の区切り文字]    [-w 表示幅]
  [-a パケット サイズ] [-e 入力エコー]        [-I 識別子を引用符で区切る]
  [-c コマンド終了]    [-L[c] サーバー一覧[クリーン アウトプット]]
  [-q "コマンドライン クエリ"] [-Q "コマンドライン クエリ" と終了]
  [-m エラー レベル]   [-V 重大度レベル]      [-W 後続のスペースを削除]
  [-u ユニコード出力]  [-r[0|1] stderr へメッセージを出力]
  [-i 入力ファイル]    [-o 出力ファイル]      [-z パスワード変更]
  [-f <コードページ (CP)> | i:<CP>[,o:<CP>]]    [-Z パスワード変更と終了]
  [-k[1|2] 制御文字の削除[置き換え]]
  [-y 可変長表示幅]
  [-Y 固定長表示幅]
  [-p[1] 統計情報の出力[コロン区切り形式]]
  [-R クライアントの地域設定を使用]
  [-K アプリケーション インテント]
  [-M マルチサブネット フェールオーバー]
  [-b エラー時にバッチを中止]
  [-v 変数の定義]      [-A 専用管理者接続]
  [-X[1] コマンド、スタートアップ スクリプト、環境変数を無効化 [終了]]
  [-x 変数の代入を無効化]
  [-? 構文の要約を表示]

sqlcmd -S hostnameOrIP -d dbname  -U userid -P password
1>  :r   test_gettables.sql
---test_gettables.sql=============
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'


If you want to run SQL from a directory like this:
  Folder0
     |-  SQLFolder 
     |- 01.sql
     |- 02.sql
     |- ....

Step1: Make a list.sql by dir or ls .cmd like:
  cd Folder0
  ls  SQLFolder/* >list.sql

Step2: Grep Replace the list.sql by replacing "^(\w)"  to ":r  $1"

Step3: Connect to SQLServer By
    sqlcmd -S hostnameOrIP -d dbname  -U userid -P password
Step4: Run list.sql
    :r  list.sql

-------------------------------------------------
1> :help
:!! [<command>]
  - Windows コマンド シェルのコマンドを実行します。
:connect server[\instance] [-l timeout] [-U user [-P password]]
  - SQL Server インスタンスに接続します。
:ed
  - 現在または最後に実行されたステートメント キャッシュを編集します。
:error <dest>
  - エラー出力をファイル、stderr、または stdout にリダイレクトします。
:exit
  - sqlcmd をすぐに終了します。
:exit()
  - ステートメント キャッシュを実行します。値を返さずに終了します。
:exit(<query>)
  - 指定したクエリを実行します。結果は数値で返されます。
go [<n>]
  - ステートメント キャッシュを n 回実行します。
:help
  - このコマンドの一覧を表示します。
:list
  - ステートメント キャッシュの内容を出力します。
:listvar
  - set sqlcmd スクリプト変数を一覧表示します。
:on error [exit|ignore]
  - バッチまたは sqlcmd コマンドのエラーに対するアクションです。
:out <filename>|stderr|stdout
  - クエリ出力をファイル、stderr、または stdout にリダイレクトします。
:perftrace <filename>|stderr|stdout
  - タイミング出力をファイル、stderr、または stdout にリダイレクトします。
:quit
  - sqlcmd をすぐに終了します。
:r <filename>
  - ファイルの内容をステートメント キャッシュに追加します。
:reset
  - ステートメント キャッシュを破棄します。
:serverlist
  - ローカルおよびネットワーク上の SQL Server を一覧表示します。
:setvar {variable}
  - sqlcmd スクリプト変数を削除します。
:setvar <variable> <value>
  - sqlcmd スクリプト変数を設定します。
1>

------------------------------------------------------------------
SET SQLCMDSERVER=HOSTNAME
SET SQLCMDDBNAME=DBNAME
SQLCMD -U USERNAME -P PASSWORD  -i  test001.sql

REM====Read list.txt (sql filepath included), and Run SQL.
FOR /F %i IN (list.txt) DO SQLCMD -U USERNAME -P PASSWORD  -i %i
---------------------------------------------
Check SQL Run Results.
select name,type   from sys.objects 
where 
name ='store procedure Name or function Name'
--and ( type ='P' OR type ='FN' OR type ='TF') 


没有评论: