Megosztás a következőn keresztül:


Az sqlcmd használata

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database a Microsoft Fabric

sqlcmd parancssori segédprogram Transact-SQL (T-SQL) utasítások és szkriptek alkalmi, interaktív végrehajtásához és a T-SQL-szkriptelési feladatok automatizálásához. Ha interaktívan szeretné használni sqlcmd, vagy szkriptfájlokat szeretne létrehozni sqlcmd, ismernie kell a T-SQL-t. Az sqlcmd többféleképpen is használhatja. Például:

  • Írja be a parancssorból a T-SQL-utasításokat. A konzol visszaadja az eredményeket. Parancssori ablak megnyitásához írja be a cmd a Windows keresőmezőbe, és válassza parancssori megnyitásához. A parancssorba írja be a sqlcmd, majd a kívánt beállítások listáját. Az sqlcmd által támogatott beállítások teljes listáját az sqlcmd sqlcmd segédprogramcímű cikkben találja.

  • Küldjön be egy sqlcmd feladatot egyetlen végrehajtandó T-SQL-utasítás megadásával, vagy a segédprogramot egy végrehajtandó T-SQL-utasításokat tartalmazó szövegfájlra mutatva. A kimenet egy szövegfájlba van irányítva, de a parancssorban is megjeleníthető.

  • SQLCMD mód az SQL Server Management Studio (SSMS) lekérdezésszerkesztőjében.

  • SQL Server Management Objects (SMO).

  • SQL Server Agent CmdExec feladatok.

Az sqlcmd gyakori beállításai

  • A kiszolgálói beállítás (-S) azon SQL Server-példányt azonosítja, amelyhez sqlcmd csatlakozik.

  • A hitelesítési beállítások (-E, -Ués -P) határozzák meg az sqlcmd által az SQL Server-példányhoz való csatlakozáshoz használt hitelesítő adatokat.

    Jegyzet

    A -E beállítás az alapértelmezett, és nem szükséges megadni.

  • A bemeneti beállítások (-Q, -qés -i) azonosítják az sqlcmd bemenetének helyét.

  • A kimeneti beállítás (-o) megadja azt a fájlt, amelybe a sqlcmd a kimenetét helyezi.

Csatlakozás az sqlcmd segédprogramhoz

  • Csatlakozzon egy alapértelmezett példányhoz a Windows-hitelesítés használatával a T-SQL-utasítások interaktív futtatásához:

    sqlcmd -S <ComputerName>
    

    Jegyzet

    Az előző példában a -E nincs megadva, mert ez az alapértelmezett, és sqlcmd a Windows-hitelesítés használatával csatlakozik az alapértelmezett példányhoz.

  • Csatlakozzon egy elnevezett példányhoz a Windows-hitelesítés használatával a T-SQL-utasítások interaktív futtatásához:

    sqlcmd -S <ComputerName>\<InstanceName>
    

    vagy

    sqlcmd -S .\<InstanceName>
    
  • Csatlakozzon egy elnevezett példányhoz a Windows-hitelesítés használatával, és adja meg a bemeneti és kimeneti fájlokat:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
    
  • Csatlakozzon a helyi számítógép alapértelmezett példányához Windows-hitelesítéssel, hajtson végre egy lekérdezést, és futtassa sqlcmd a lekérdezés befejezése után:

    sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
    
  • Csatlakozzon a helyi számítógép alapértelmezett példányához Windows-hitelesítéssel, végezzen lekérdezést, irányítsa a kimenetet egy fájlhoz, és lépjen ki sqlcmd a lekérdezés befejezése után:

    sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
    
  • Csatlakozzon egy elnevezett példányhoz az SQL Server-hitelesítés használatával a T-SQL-utasítások interaktív futtatásához, sqlcmd jelszó kérésével:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
    

    Tipp

    A sqlcmd segédprogram által támogatott beállítások listájának megtekintéséhez: sqlcmd -?.

Transact-SQL utasítások interaktív futtatása sqlcmd használatával

Az sqlcmd segédprogrammal interaktív módon hajthat végre T-SQL-utasításokat egy parancssori ablakban. A T-SQL-utasítások sqlcmdhasználatával történő interaktív végrehajtásához futtassa a segédprogramot a bemeneti fájlok vagy lekérdezések megadására szolgáló -Q, -q, -Zvagy -i beállítások használata nélkül. Például:

sqlcmd -S <ComputerName>\<InstanceName>

Amikor a parancsot bemeneti fájlok vagy lekérdezések nélkül hajtja végre, sqlcmd csatlakozik az SQL Server megadott példányához, majd egy új sort jelenít meg egy 1>, majd egy villogó aláhúzásjelet, amely az sqlcmd parancssornak a neve. A 1 azt jelzi, hogy ez egy T-SQL-utasítás első sora, és a sqlcmd parancssor az a pont, ahol a T-SQL utasítás elindul a beíráskor.

Az sqlcmd parancssorba beírhatja a T-SQL-utasításokat és sqlcmd parancsokat is, például GO és EXIT. Minden T-SQL-utasítás egy utasításgyorsítótár nevű pufferbe kerül. Ezeket az utasításokat a rendszer a GO parancs beírása után küldi el az SQL Servernek, majd nyomja le az Enterbillentyűt. Ha ki szeretne lépni sqlcmd, írja be EXIT vagy QUIT egy új sor elején.

A nyilatkozat gyorsítótár törléséhez írja be a :RESET. A beírása Ctrl+C okozza, hogy a sqlcmd kilép. Ctrl+C is használható az utasítás-gyorsítótár végrehajtásának leállítására egy GO parancs kiadása után.

Az interaktív munkamenetben megadott T-SQL-utasítások a :ED parancs és az sqlcmd parancssor beírásával szerkeszthetők. A szerkesztő megnyílik, és a T-SQL-utasítás szerkesztése és a szerkesztő bezárása után a módosított T-SQL-utasítás megjelenik a parancsablakban. Adja meg GO a módosított T-SQL-utasítás futtatásához.

Idézett karakterláncok

Az idézőjelek közé zárt karakterek további előfeldolgozás nélkül használhatók, azzal a kivétellel, hogy az idézőjelek két egymást követő idézőjel megadásával szúrhatók be egy sztringbe. Az SQL Server ezt a karaktersorozatot egyetlen idézőjelként kezeli. (A fordítás azonban a kiszolgálón történik.) A szkriptelési változók nem lesznek kibontva, amikor egy sztringben jelennek meg.

Például:

sqlcmd
PRINT "Length: 5"" 7'";
GO

Itt van az eredmény.

Length: 5" 7'

Több sorra kiterjedő szövegrészek

sqlcmd támogatja a több sorra kiterjedő karakterláncokat. Az alábbi SELECT utasítás például több sorra terjed ki, de a GO beírása után egyetlen sztringként hajtható végre, majd nyomja le a Enterbillentyűt.

SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO

Interaktív sqlcmd-példa

Ez egy példa arra, hogy mit lát sqlcmd interaktív futtatásakor.

Parancssori ablak megnyitásakor egy sor hasonlít a következőhöz:

C:\Temp\>

Ez azt jelenti, hogy a C:\Temp\ mappa az aktuális mappa, és ha megad egy fájlnevet, a Windows az adott mappában keresi a fájlt.

Írja be sqlcmd a helyi számítógépen található SQL Server alapértelmezett példányához való csatlakozáshoz, és a parancssori ablak tartalma a következő:

C:\Temp>sqlcmd
1>

Ez azt jelenti, hogy csatlakozott az SQL Server-példányhoz, és sqlcmd készen áll a T-SQL-utasítások és sqlcmd parancsok elfogadására. A 1> utáni villogó aláhúzás az sqlcmd parancssor, amely jelzi a beírt utasítások és parancsok megjelenítésének helyét. Most írja be USE AdventureWorks2022, és nyomja le Enter, majd írja be GO, majd nyomja le Enter. A Parancssor ablak tartalma a következő:

sqlcmd
USE AdventureWorks2022;
GO

Itt van az eredmény.

Changed database context to 'AdventureWorks2022'.
1>

Amikor megnyomja a Enterbillentyűt, az jelet ad a sqlcmd számára, hogy egy új sort kezdjen. Ha megnyomja az Enter billentyűt a GO beírása után, ez jelzi az sqlcmd számára, hogy küldje el a USE AdventureWorks2022 utasítást az SQL Server példányának. sqlcmd ezután egy üzenetet ad vissza, amely jelzi, hogy a USE utasítás sikeresen befejeződött, és új 1> üzenetet jelenít meg egy új utasítás vagy parancs megadásához.

Az alábbi példa bemutatja, hogy mit tartalmaz a parancssori ablak, ha beír egy SELECT utasítást, egy GO-et a SELECTvégrehajtásához, valamint egy EXIT-at a kilépéshez a sqlcmd-ből.

USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Itt van az eredmény.

BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie

A kimenet létrehozása után sqlcmd alaphelyzetbe állítja az sqlcmd parancssort, és megjeleníti a 1>. A munkamenetből való kilépéshez írja be a EXIT kódot a 1> parancssorba. Most már bezárhatja a Parancssor ablakot egy másik EXIT parancs beírásával.

SQL Server-tároló létrehozása és lekérdezése

A sqlcmd (Go) használatával létrehozhat egy új SQL Server-példányt egy tárolóban. sqlcmd (Go) egy create utasítást tesz elérhetővé, amely lehetővé teszi a tárolólemezkép és az SQL Server biztonsági mentésének megadását, így gyorsan létrehozhat egy SQL Server-példányt fejlesztési, hibakeresési és elemzési célokra.

Fontos

Telepítenie kell egy tároló futtatókörnyezetet, például Docker, vagy Podman.

Az alábbi parancs bemutatja, hogyan tekintheti meg az új SQL Server-tároló létrehozásához rendelkezésre álló összes lehetőséget:

sqlcmd create mssql --help

A következő parancs létrehoz egy új SQL Server-példányt az SQL Server 2022 legújabb verziójával (16.x), majd visszaállítja a Wide World Importers mintaadatbázist:

sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak

Az SQL Server-példány létrehozása után sqlcmd (Go) használatával kezelheti és lekérdezheti.

A következő parancs megerősíti a létrehozott példány verzióját:

sqlcmd query "SELECT @@version"

A következő parancs egy interaktív munkamenetet indít el a létrehozott példánysal:

sqlcmd query

Az alábbi parancs megnyitja az Azure Data Studiót, és automatikusan csatlakozik a létrehozási folyamat során visszaállított adatbázishoz:

sqlcmd open ads

Az alábbi parancs a létrehozott példányhoz való csatlakozáshoz használandó kapcsolati sztringeket sorolja fel:

sqlcmd config connection-strings

A következő paranccsal távolíthatja el a tárolót, ha már nincs rá szükség:

sqlcmd delete

Transact-SQL szkriptfájlok futtatása sqlcmd használatával

Az sqlcmd használatával adatbázisszkriptfájlokat hajthat végre. A szkriptfájlok olyan szövegfájlok, amelyek T-SQL-utasítások, sqlcmd parancsok és szkriptelési változók kombinációját tartalmazzák. A változók szkriptelésével kapcsolatos további információkért lásd: Sqlcmd használata szkriptelési változókkal. sqlcmd a szkriptfájlban lévő utasítások, parancsok és szkriptelési változók ugyanúgy működnek, mint az interaktívan beírt utasítások és parancsok. A fő különbség az, hogy sqlcmd szünet nélkül olvassa át a bemeneti fájlt ahelyett, hogy arra vár, hogy a felhasználó beírja az utasításokat, parancsokat és szkriptelési változókat.

Az adatbázisszkriptfájlok létrehozásának különböző módjai vannak:

  • Az SQL Server Management Studióban interaktívan létrehozhat és hibakeresést végezhet T-SQL-utasításokból, majd szkriptfájlként mentheti a Lekérdezés ablak tartalmát.

  • T-SQL-utasításokat tartalmazó szövegfájlt szövegszerkesztővel, például Jegyzettömbbel hozhat létre.

Példák

A. Szkript futtatása sqlcmd használatával

Indítsa el a Jegyzettömbet, és írja be a következő T-SQL-utasításokat:

USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Hozzon létre egy MyFolder nevű mappát, majd mentse a szkriptet fájlként MyScript.sql a mappába C:\MyFolder. Írja be a következő parancsot a parancssorba a szkript futtatásához, és a kimenet kerüljön a(z) MyOutput.txt és MyFolderhelyre.

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Itt van az eredmény.

Changed database context to 'AdventureWorks2022'.
BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie
(3 rows affected)

B. Az sqlcmd használata dedikált rendszergazdai kapcsolattal

Az alábbi példában a sqlcmd eszközt használják egy blokkolási problémával küzdő szerverhez való kapcsolódáshoz a dedikált rendszergazdai kapcsolat (DAC) segítségével.

C:\Temp\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM `sys.dm_exec_requests` WHERE blocking_session_id <> 0;
2> GO

Itt van az eredmény.

session_id   blocking_session_id
-----------  --------------------`
62           64
(1 rows affected)

A blokkolási folyamat befejezéséhez használja sqlcmd.

1> KILL 64;
2> GO

C. Tárolt eljárás végrehajtása az sqlcmd használatával

Az alábbi példa bemutatja, hogyan hajthat végre tárolt eljárást sqlcmdhasználatával. Hozza létre a következő tárolt eljárást.

USE AdventureWorks2022;
GO

IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL
    DROP PROCEDURE dbo.ContactEmailAddress;
GO

CREATE PROCEDURE dbo.ContactEmailAddress (
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50)
)
AS
SET NOCOUNT ON;

SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
    AND LastName = @LastName;

SET NOCOUNT OFF;
GO

Az sqlcmd parancssorba írja be a következőket:

C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com

D. Sqlcmd használata adatbázis-karbantartáshoz

Az alábbi példa bemutatja, hogyan használható sqlcmd egy adatbázis-karbantartási feladathoz. Hozzon létre C:\Temp\BackupTemplate.sql a következő kóddal.

USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

Az sqlcmd parancssorba írja be a következő kódot:

C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E. Kód végrehajtása több példányon az sqlcmd használatával

A fájl alábbi kódja egy szkriptet jelenít meg, amely két példányhoz csatlakozik. Vegye észre a GO-t a második példányhoz való csatlakozás előtt.

:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO

E. XML-kimenet visszaadása

Az alábbi példa azt mutatja be, hogy az XML-kimenet formázás nélkül, folyamatos streamben lesz visszaadva.

C:\Temp\>sqlcmd -d AdventureWorks2022
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,

F. Az sqlcmd használata Windows-szkriptfájlban

Egy sqlcmd parancs, például sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt, végrehajtható egy .bat fájlban a VBScripttel együtt. Ebben az esetben ne használjon interaktív beállításokat. sqlcmd telepíteni kell a .bat fájlt végrehajtó számítógépre.

Először hozza létre a következő négy fájlt a C:\Temp-as könyvtárban:

  • C:\Temp\badscript.sql

    SELECT batch_1_this_is_an_error
    GO
    SELECT 'batch #2'
    GO
    
  • C:\Temp\goodscript.sql

    SELECT 'batch #1';
    GO
    SELECT 'batch #2';
    GO
    
  • C:\Temp\returnvalue.sql

    :exit(select 100)
    
  • C:\Temp\windowsscript.bat

    @echo off
    
    echo Running badscript.sql
    sqlcmd -i badscript.sql -b -o out.log
    if not errorlevel 1 goto next1
    echo == An error occurred
    
    :next1
    
    echo Running goodscript.sql
    sqlcmd -i goodscript.sql -b -o out.log
    if not errorlevel 1 goto next2
    echo == An error occurred
    
    :next2
    echo Running returnvalue.sql
    sqlcmd -i returnvalue.sql -o out.log
    echo SQLCMD returned %errorlevel% to the command shell
    
    :exit
    

Ezután a parancssorban futtassa a C:\Temp\windowsscript.bat:

C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. Az sqlcmd használata az Azure SQL Database titkosításának beállításához

sqlcmd végrehajtható az SQL Database-adatokhoz való csatlakozáskor a titkosítás és a tanúsítványmegbízhatóság megadásához. Két sqlcmd lehetőség érhető el:

  • Az ügyfél a -N kapcsolót használja titkosított kapcsolat kéréséhez. Ez a beállítás egyenértékű a ADO.net ENCRYPT = truebeállítással.

  • Az ügyfél a -C kapcsolót arra használja, hogy implicit módon konfigurálja a megbízhatósági kiszolgáló tanúsítványát, és ne érvényesítse azt. Ez a beállítás egyenértékű a ADO.net TRUSTSERVERCERTIFICATE = truebeállítással.

Az SQL Database szolgáltatás nem támogatja az SQL Server-példányon elérhető összes SET lehetőséget. Az alábbi beállítások hibát jeleznek, ha a megfelelő SET beállítás értéke ON vagy OFF:

  • SET ANSI_DEFAULTS
  • SET ANSI_NULLS
  • SET REMOTE_PROC_TRANSACTIONS
  • SET ANSI_NULL_DEFAULT

A következő SET-beállítások nem adnak kivételt, de nem használhatók. Ezeket lefokozottnak nyilvánították.

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Szintaxis

Az alábbi példák azokra az esetekre vonatkoznak, amelyekben az SQL Server natív ügyfélszolgáltatói beállításai a következők:

  • ForceProtocolEncryption = False
  • Trust Server Certificate = No

Csatlakozás Windows-hitelesítő adatokkal és a kommunikáció titkosítása:

sqlcmd -E -N

Csatlakozás Windows-hitelesítő adatokkal és megbízhatósági kiszolgálói tanúsítvánnyal:

sqlcmd -E -C

Csatlakozás Windows-hitelesítő adatokkal, a kommunikáció titkosítása és a megbízhatósági kiszolgáló tanúsítványa:

sqlcmd -E -N -C

Az alábbi példák azokra az esetekre vonatkoznak, amelyekben az SQL Server natív ügyfélszolgáltatói beállításai a következők:

  • ForceProtocolEncryption = True
  • TrustServerCertificate = Yes

Csatlakozás Windows-hitelesítő adatokkal, a kommunikáció titkosítása és a megbízhatósági kiszolgáló tanúsítványa:

sqlcmd -E

Csatlakozás Windows-hitelesítő adatokkal, a kommunikáció titkosítása és a megbízhatósági kiszolgáló tanúsítványa:

sqlcmd -E -N

Csatlakozás Windows-hitelesítő adatokkal, a kommunikáció titkosítása és a megbízhatósági kiszolgáló tanúsítványa:

sqlcmd -E -C

Csatlakozás Windows-hitelesítő adatokkal, a kommunikáció titkosítása és a megbízhatósági kiszolgáló tanúsítványa:

sqlcmd -E -N -C

Ha a szolgáltató megadja a ForceProtocolEncryption = True, akkor a titkosítás akkor is engedélyezve lesz, ha Encrypt=No a kapcsolati sztringben.