sqlcmdコマンドラインツールに基づくSQL serverの管理


SQLServerデータベースには、よく知られているSSMSベースのSQLserverデータベースのほか、強力なコマンドラインツールsqlcmdがあります.このコマンドラインツールは、基本的にOracle SQL*PlusおよびMySQLコマンドプロンプトの下で、関連する運用次元管理を実行するのと同じです.特に複数のスクリプト実行が必要な場合、sqlcmdが役立ちます.この文書では、sqlcmdのいくつかの一般的な使用方法と、バッチでスクリプトを実行する方法の例について説明します.
一、sqlcmdヘルプの取得
C:\>sqlcmd -?
Microsoft (R) SQL Server Command Line Tool
Version 12.0.2000.8 NT   %     SQLserver2014 12.0%
Copyright (c) 2014 Microsoft. All rights reserved.

usage: Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-N Encrypt Connection][-C Trust Server Certificate]
  [-d use database name] [-l login timeout]     [-t query timeout]
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit]
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f <codepage> | i:<codepage>[,o:<codepage>]] [-Z new password and exit]
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-K application intent]
  [-M multisubnet failover]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary]

二、最もよく使われるオプション
-S),     sqlcmd      Microsoft SQL Server   。
      (-E-U   -P),     sqlcmd     SQL Server         。-E        ,    。

    (-Q-q   -i),     sqlcmd      。
     (-o),     sqlcmd        。  

三、よくある使い方
   Windows            ,        Transact-SQL   :
        sqlcmd -S <ComputerName>-E,        ,   sqlcmd    Windows            。

   Windows            ,        Transact-SQL   :
        sqlcmd -S <ComputerName>\<InstanceName>      sqlcmd -S .\<InstanceName>


   Windows            ,          :
        sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>

   Windows                   ,    ,           sqlcmd       :
        sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"

   Windows                   ,    ,          ,           sqlcmd   :
        sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt

   SQL Server            ,        Transact-SQL   ,   sqlcmd       :
        sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>

四、インタラクティブな使い方
-Q-q-Z   -i                        。
          :sqlcmd -S <ComputerName>\<InstanceName>

    2      
        GO + Enter   :       SQLserver      
        Exit   QUIT :   sqlcmd       
        :REST        :       ,   ^C    sqlcmd   ,    GO    ,     ^C          。
        :ED          :        SQL

        
        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
        1> use testdb;
        2> go
                    'testdb'1> select * from t2;
        2> go
        id          id2         ename
        ----------- ----------- -------------------
                  1           1 NULL
                  1        NULL NULL
                  1           2 John

        (3 rows affected)
        1> exit 

五、sqlcmdを使用してSQLスクリプトを実行する
これは比較的役に立つ.Oracle SQL*PlusまたはMySQLコマンドラインを熟知している子供靴にとって、このツールはスクリプトを実行し、特に複数のスクリプトが実行する必要がある気持ちがあります.それは爽やかですね.言わないで、直接使い方を見ます.
1.単一スクリプトの実行
      
        C:\>type E:\temp\Testsql.sql
        USE testdb;
        GO
        SELECT * FROM t2;
        GO

            
        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -i E:\temp\Testsql.sql -o E:\temp\Testresult.txt

        C:\>type E:\temp\Testresult.txt
                    'testdb'。
        id          id2         ename
        ----------- ----------- --------------------
                  1           1 NULL
                  1        NULL NULL
                  1           2 John

        (3 rows affected)   

2、専用管理接続によるsqlcmdの使用
               session
        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -A
        1> SELECT blocking_session_id FROM sys.dm_exec_requests WHERE blocking_session_id<>0;
        2> go
        blocking_session_id
        -------------------
                         54

        (1 rows affected)
        1> kill 54;
        2> go

3、sqlcmdを使用してストレージプロセスを実行する
C:\>type E:\temp\TestProc.sql
        CREATE PROC proc_query_t2 @ename VARCHAR(20)
        AS
            SELECT  *
            FROM    t2
            WHERE   ename = @ename;

        GO

        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -i E:\temp\TestProc.sql

        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
        1> :setvar ename robin
        1> exec testdb.dbo.proc_query_t2 $(ename)
        2> go
        id          id2         ename
        ----------- ----------- --------------------
                  1           1 Robin

        (1 rows affected)

4、sqlcmdによるデータベースの日常管理
C:\>type E:\temp\DB_bak.sql
        USE master;
        GO
        BACKUP DATABASE [$(db)] TO DISK='$(bakfile)'

        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
        1> :setvar db testdb
        1> :setvar bakfile e:\temp\testdb01.bak
        1> :r e:\temp\DB_bak.sql
                    'master'1> go
              'testdb''testdb' (     1  )    368'testdb''testdb_log' (     1  )    5BACKUP DATABASE       3730.377  (7.729 MB/ )。

5、sqlcmdは複数のインスタンスに対してコードを実行する
2> :connect 192.168.1.194 -U robin -P xx
        Sqlcmd: Successfully connected to server '192.168.1.194'.
        1> select getdate()
        2> go

        -----------------------
        2016-03-17 13:31:16.390

        (1 rows affected)
        1> :connect 192.168.1.207,2433 -U sa -P 123
        Sqlcmd: Successfully connected to server '192.168.1.207,2433'.
        1> select getdate()
        2> go

        -----------------------
        2016-03-17 13:32:25.787

        (1 rows affected)

6、バッチ方式でタスクを実行する
                ,           .bat      windows    。
        C:\>type e:\temp\batch.bat
        @echo off
        sqlcmd -U sa -P Sqlserve -H HQ1636 -i e:\temp\all.sql -b -o e:\temp\out.log

        C:\>type e:\temp\all.sql
        :r e:\temp\driver.sql
        :r e:\temp\hostinfo.sql

        C:\>type e:\temp\hostinfo.sql
        PRINT 'Below is host info.';
        PRINT '=================================';

        USE [master];
        GO
        EXEC xp_msver;
        GO

        C:\>type e:\temp\driver.sql
        PRINT 'Below is drive info.';
        PRINT '=================================';
        USE master;
        GO
        EXEC xp_fixeddrives;
        GO

        C:\>e:\temp\batch.bat    %       %

        Below is drive info.
        =================================
                    'master'。
        drive MB         
        ----- -----------
        C           99784
        D          138623
        E           26783
        F          217172

        (4 rows affected)
        Below is host info.
        =================================
                    'master'。
        Index  Name                             Internal_Value Character_Value                                           
        ------ -------------------------------- -------------- --------------------------------------------------
             1 ProductName                                NULL Microsoft SQL Server                                      
             2 ProductVersion                           786432 12.0.2000.8                                               
             3 Language                                   2052   (  ,  )                                          
             4 Platform                                   NULL NT x64                                                    
             5 Comments                                   NULL SQL                                                       
             6 CompanyName                                NULL Microsoft Corporation                                     
             7 FileDescription                            NULL SQL Server Windows NT - 64 Bit                            
             8 FileVersion                                NULL 2014.0120.2000.08 ((SQL14_RTM).140220-1752)               
             9 InternalName                               NULL SQLSERVR                                                  
            10 LegalCopyright                             NULL Microsoft Corp. All rights reserved.                      
            11 LegalTrademarks                            NULL Microsoft SQL Server is a registered trademark            
            12 OriginalFilename                           NULL SQLSERVR.EXE                                              
            13 PrivateBuild                               NULL NULL                                                      
            14 SpecialBuild                          131072008 NULL                                                   
            15 WindowsVersion                        131072008 6.1 (7601)                                             
            16 ProcessorCount                                4 4                                                      
            17 ProcessorActiveMask                        NULL                f                                       
            18 ProcessorType                              8664 NULL                                                   
            19 PhysicalMemory                            16297 16297 (17088618496)                                    
            20 Product ID                                 NULL NULL