Megosztás:


Az sqlcmd használata

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Az sqlcmd parancssori segédprogram Transact-SQL (T-SQL) utasítások és szkriptek alkalmi, interaktív végrehajtásához. Emellett automatizálja a T-SQL-szkriptelési feladatokat is. Az sqlcmd interaktív használatához vagy az sqlcmd szkriptfájljainak létrehozásához ismernie kell a T-SQL-t. Az sqlcmd többféleképpen is használhatja. Például:

  • Írja be a parancssori felületről (CLI) származó T-SQL-utasításokat. A konzol visszaadja az eredményeket.

    Note

    A Windowsban megnyithat egy parancssori ablakot cmd a Windows keresőmezőjében, és kiválaszthatja a parancssort. MacOS és Linux rendszeren használhatja a beépített terminálemulátort.

    Írja be sqlcmd a konzolba, majd a kívánt beállítások listáját, és végül nyomja meg az Enter billentyűt. Az sqlcmd által támogatott lehetőségek teljes listáját az sqlcmd segédprogramban 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 konzolon is megjeleníthető.

  • SQLCMD mód az SQL Server Management Studióban (SSMS).

  • 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.

    Note

    Ez az alapértelmezett beállítás -E , é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, amelyben az sqlcmd írja a kimenetét.

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>
    

    Note

    Az előző példában nincs megadva, -E mert ez az alapértelmezett érték. Az 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>
    

    or

    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 AdventureWorks2025.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 AdventureWorks2025.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>
    

    Tip

    Az sqlcmd segédprogram által támogatott beállítások listájának megtekintéséhez futtassa a következőt: sqlcmd -?.

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

Az sqlcmd segédprogram interaktív használatával t-SQL-utasításokat hajthat végre a konzolon. 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>

Ha bemeneti fájlok vagy lekérdezések nélkül futtatja a parancsot, az sqlcmd az SQL Server megadott példányához csatlakozik. Ekkor megjelenik egy új sor, 1> amelyet egy villogó aláhúzásjel követ, amelyet az sqlcmd parancssornak hívnak. 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 CtrlC+ beírásával az sqlcmd kilép. Ctrl+A C parancsot követően az utasítás-gyorsítótár végrehajtásának leállítására GO is használható.

Írja be a parancsot az :EDsqlcmd parancssorba a T-SQL-utasítások szerkesztéséhez. Megnyílik a szerkesztő, é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 karaktereket további előfeldolgozás nélkül is használhatja, azzal a kivétellel, hogy idézőjeleket szúrhat be egy sztringbe két egymást követő idézőjel megadásával. 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 a példa az sqlcmd interaktív futtatásakor megjelenő elemeket mutatja be.

Amikor megnyit egy konzolablakot a Windowsban, az alábbi példához hasonló kimenet jelenhet meg:

C:\Temp\>

Ez a sor azt jelenti, hogy a mappa C:\Temp\ az aktuális mappa. Ha megad egy fájlnevet, az operációs rendszer megkeresi a fájlt a mappában.

Írja be az sqlcmd parancsot az SQL Server alapértelmezett példányához való csatlakozáshoz a helyi számítógépen. A konzolablak tartalma a következő:

C:\Temp>sqlcmd
1>

Ez a kimenet azt jelenti, hogy csatlakozott az SQL Server-példányhoz. Az sqlcmd készen áll a T-SQL-utasítások és az sqlcmd parancsok elfogadására. A 1> után villogó aláhúzás az sqlcmd jelző. Jelzi a beírt utasítások és parancsok megjelenítésének helyét. Most írja be USE AdventureWorks2025 és nyomja le az Enter billentyűt. Ezután írja be GO és nyomja le az Enter billentyűt. A konzol tartalma a következő:

sqlcmd
USE AdventureWorks2025;
GO

Itt van az eredmény.

Changed database context to 'AdventureWorks2025'.
1>

Amikor megnyomja a Enterbillentyűt, az jelet ad a sqlcmd számára, hogy egy új sort kezdjen. Nyomja le az Enter billentyűt, miután beírta GO az sqlcmd parancsot, hogy elküldje az USE AdventureWorks2025 utasítást az SQL Server példánynak. Az sqlcmd ezután egy üzenetet ad vissza, amely jelzi, hogy az USE utasítás sikeresen befejeződött. Új 1> prompt jelenik meg jelként egy új utasítás vagy parancs megadásához.

Az alábbi példa bemutatja, hogy mit tartalmaz a konzol, ha beír egy utasítást SELECT , egy GO a parancs végrehajtásához SELECT, és egy EXIT az sqlcmdből való kilépéshez:

USE AdventureWorks2025;
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

Miután sqlcmd generálja a kimenetet, visszaállítja az sqlcmd parancssorát az alapértelmezett állapotba, és megjeleníti 1>. Írja be EXIT a 1> parancsnál a munkamenetből való kilépéshez. Most már bezárhatja a konzolablakot egy másik EXIT parancs beírásával, majd az Enter paranccsal.

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. Az sqlcmd (Go) egy utasítást create tesz elérhetővé a tárolólemezkép és az SQL Server biztonsági mentésének megadásához. Gyorsan létrehozhat egy SQL Server-példányt fejlesztési, hibakeresési és elemzési célokra.

Important

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

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 2025 legújabb verziójával (17.x), majd visszaállítja a Wide World Importers mintaadatbázist:

sqlcmd create mssql --accept-eula --tag 2025-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 az sqlcmd (Go) használatával kezelheti és kérdezheti le.

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 a létrehozott példányhoz való csatlakozáshoz használható kapcsolati sztringeket sorolja fel:

sqlcmd config connection-strings

A következő paranccsal távolítsa 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

Adatbázisszkriptfájlok futtatásához használja az sqlcmd parancsot. 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. Az sqlcmd a parancsfájlok utasításaival, parancsaival és szkriptelési változóival ugyanúgy működik, 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.

Adatbázisszkriptfájlokat különböző módokon hozhat létre:

  • Interaktívan felépíthet és hibakereshet egy T-SQL utasítássorozatot az SQL Server Management Studióban, majd a Lekérdezés ablak tartalmát szkriptfájlként mentheti.

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

Examples

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 AdventureWorks2025;
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. Adja meg a következő parancsot a konzolon a szkript futtatásához és a kimenet beírásához MyOutput.txtMyFolder:

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

Itt van az eredmény.

Changed database context to 'AdventureWorks2025'.
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élda az sqlcmd használatával csatlakozik egy blokkoló problémával rendelkező kiszolgálóhoz a dedikált rendszergazdai kapcsolat (DAC) használatával.

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 AdventureWorks2025;
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ő parancsot:

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 futtatá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. Figyelje meg GO 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

F. XML-kimenet visszaadása

Az alábbi példa bemutatja, hogyan tér vissza az XML-kimenet formázatlan, folyamatos adatfolyamként.

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

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

Futtathat egy sqlcmd parancsot, például az sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt, egy .bat fájlban együtt a VBScript-kóddal. Ebben a forgatókönyvben ne használjon interaktív beállításokat. Az sqlcmd-et telepíteni kell a fájlt futtató .bat 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 futtassa C:\Temp\windowsscript.bat a konzolon:

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

SQLCMD returned 100 to the command shell

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

Az SQL Database-adatokkal való kapcsolaton futtathatja az sqlcmd parancsot a titkosítás és a tanúsítványmegbízhatóság megadásához. Két sqlcmd lehetőség érhető el:

  • A -N kapcsoló egy titkosított kapcsolat ügyfélkérése. Ez a beállítás egyenértékű a ADO.NET ENCRYPT = truebeállítással.

  • A -C kapcsoló úgy konfigurálja az ügyfelet, hogy implicit módon megbízzon a kiszolgálói tanúsítványban, é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 elavultak. Nem adnak kivételt, de nem használhatók:

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntax

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, kommunikáció titkosítása és megbízhatósági kiszolgálói tanúsítvány használatával:

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, kommunikáció titkosítása és megbízhatósági kiszolgálói tanúsítvány használatával:

sqlcmd -E

Csatlakozás Windows-hitelesítő adatokkal, kommunikáció titkosítása és megbízhatósági kiszolgálói tanúsítvány használatával:

sqlcmd -E -N

Csatlakozás Windows-hitelesítő adatokkal, kommunikáció titkosítása és megbízhatósági kiszolgálói tanúsítvány használatával:

sqlcmd -E -C

Csatlakozás Windows-hitelesítő adatokkal, kommunikáció titkosítása és megbízhatósági kiszolgálói tanúsítvány használatával:

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.