Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
Az sqlcmd segédprogram lehetővé teszi Transact-SQL utasítások, rendszereljárások és szkriptfájlok megadását.
Note
Ha meg szeretné tudni, hogy az sqlcmd melyik változata és verziója van telepítve a rendszeren, tekintse meg az sqlcmd segédprogram telepített verziójának ellenőrzését. Az sqlcmd beszerzéséről további információt az sqlcmd segédprogram letöltése és telepítése című témakörben talál.
Szkriptelési változók az sqlcmdben
A szkriptekben használt változókat szkriptelési változóknak nevezzük. A szkriptelési változók lehetővé teszik, hogy egy szkript több forgatókönyvben is használható legyen. Ha például egy szkriptet több kiszolgálón szeretne futtatni, az egyes kiszolgálók szkriptjének módosítása helyett használhat egy szkriptelési változót a kiszolgálónévhez. A szkriptelési változóhoz megadott kiszolgálónév módosításával ugyanaz a szkript végrehajtható különböző kiszolgálókon.
A szkriptelési változók explicit módon, a setvar parancs használatával vagy implicit módon is meghatározhatók a sqlcmd -v beállítással.
Ez a cikk példákat is tartalmaz a parancssor környezeti változóinak a használatával történő meghatározására SET.
Szkriptelési változók beállítása a setvar paranccsal
A setvar parancs definiálja a szkriptelési változókat. A parancs használatával definiált változókat a setvar rendszer belsőleg tárolja. A szkriptelési változókat nem szabad összekeverni a parancssorban SEThasználatával definiált környezeti változókkal. Ha egy szkript olyan változóra hivatkozik, amely nem környezeti változó, vagy nem a használatával setvarvan definiálva, hibaüzenet jelenik meg, és a szkript végrehajtása leáll. További információért tekintse meg a -b opciót.
Változó elsőbbsége (alacsonytól magasig)
Ha egynél több változótípus neve azonos, a rendszer a legmagasabb prioritású változót használja.
- Rendszerszintű környezeti változók
- Felhasználói szintű környezeti változók
- A parancssori felület (
SET X=Y) a parancssorba van állítva, mielőtt az sqlcmd indítása megtörténik. sqlcmd -v X=Y:Setvar X Y
Note
A Windows 11 környezeti változóinak megtekintéséhez nyissa meg a Beállítások menüpontot, majd lépjen a Rendszer>Névjegy menüre, és válassza a Speciális rendszerbeállítások hivatkozást. A Rendszer tulajdonságai ablakban válassza a Környezeti változók lehetőséget. Linuxon írja be printenv a parancssorba, macOS-ben pedig írja be a következőt env: .
Szkriptelési változók implicit beállítása
Ha sqlcmd egy kapcsolódó sqlcmd változóval rendelkező beállítással indítja el, a sqlcmd változó implicit módon a beállítással megadott értékre lesz beállítva. Az alábbi példában a sqlcmd a -l beállítással kezdődik. Ez implicit módon beállítja a SQLLOGINTIMEOUT változót.
sqlcmd -l 60
A -v beállítással is beállíthat egy parancsfájlban létező szkriptelési változót. A következő szkriptben (a fájlnév testscript.sql) ColumnName egy szkriptelési változó.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Ezután a -v beállítással megadhatja a visszaadni kívánt oszlop nevét:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Ha egy másik oszlopot szeretne visszaadni ugyanazzal a szkripttel, módosítsa a ColumnName szkriptelési változó értékét.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
A változónevek és -értékek szkriptelési irányelvei
A szkriptelési változók elnevezésekor vegye figyelembe az alábbi irányelveket:
A változónevek nem tartalmazhatnak szóköz karaktereket vagy idézőjeleket.
A változónevek nem lehetnek azonosak a változókifejezésekkel, például $(var).
A szkriptelési változók nem érzékenyek a nagy- és kisbetűkre.
Note
Ha nincs hozzárendelve érték egy sqlcmd környezeti változóhoz, a változó el lesz távolítva. A
:setvar VarNameérték nélküli használata törli a változót.
A szkriptelési változók értékeinek megadásakor vegye figyelembe az alábbi irányelveket:
- A használatával
setvardefiniált változóértékeket vagy a-vbeállítást idézőjelek közé kell foglalni, ha a sztring értéke szóközöket tartalmaz. - Ha az idézőjelek a változó értékének részei, azokat meg kell kódolni. Például: :
setvar MyVar "spac""e".
Irányelvek a cmd.exe SET változóértékekhez és -nevekhez
A SET használatával definiált változók a cmd.exe környezet részét képezik, és sqlcmdhivatkozhatnak rá. Vegye figyelembe a következő irányelveket:
- A változónevek nem tartalmazhatnak szóköz karaktereket vagy idézőjeleket.
- A változó értékek szóközöket vagy idézőjeleket tartalmazhatnak.
sqlcmd szkriptelési változók
| Variable | Kapcsolódó opció | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
8 (másodperc) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = várakozás határozatlan ideig |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = korlátlan |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD és SQLCMDSERVER be vannak állítva, amikor :Connect használatban van.
2 R azt jelzi, hogy az érték csak egyszer állítható be a program inicializálása során.
A 3 R/W azt jelzi, hogy az érték alaphelyzetbe állítható a parancs használatával, és az setvar azt követő parancsok az új értéket használják.
Examples
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. A setvar parancs használata szkriptben
Számos sqlcmd lehetőség vezérelhető egy szkriptben a setvar paranccsal. Az alábbi példában a szkript test.sql jön létre, amelyben a SQLCMDLOGINTIMEOUT változó 60 másodpercre van állítva, és egy másik szkriptelési változó, servertestserver. Az alábbi kód a test.sql-ban található.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
A szkript meghívása ezután az sqlcmd használatával történik:
sqlcmd -i c:\test.sql
B. A setvar parancs interaktív használata
Az alábbi példa bemutatja, hogyan állíthat be interaktívan szkriptelési változót a setvar paranccsal.
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Itt van az eredmény.
Changed database context to 'AdventureWorks2022'
1>
C. Parancssori környezeti változók használata az sqlcmdben
Az alábbi példában négy környezeti változó are van beállítva, majd meg van hívva a sqlcmdáltal.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Felhasználói szintű környezeti változók használata az SQLCMD-ben
Az alábbi példában a %Temp% felhasználói szintű környezeti változó a parancssorban van beállítva, és a sqlcmd bemeneti fájlnak továbbítja. A felhasználói szintű környezeti változó beszerzéséhez a Vezérlőpult-ban kattintson duplán a Rendszer. Válassza a Tovább lapot, majd válassza Környezeti változóklehetőséget.
A következő kód található a bemeneti fájlban C:\testscript.txt:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
A következő kódot adja meg a parancssorban:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
A rendszer a következő eredményt küldi el a kimeneti fájlnak C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Indítási szkript használata
Egy sqlcmd indítási szkript végrehajtása sqlcmd indításakor. Az alábbi példa a SQLCMDINIkörnyezeti változót állítja be. Ez a init.sql. tartalma.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Ez meghívja a init.sql fájlt sqlcmd indításakor.
SET sqlcmdini=c:\init.sql
sqlcmd
Ez a kimenet.
1> <user> is connected to <server> (9.00.2047.00)
Note
A -X beállítás letiltja az indítási szkript funkciót.
F. Változó kiterjesztése
Az alábbi példa az adatok sqlcmd változó formájában történő működését mutatja be.
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Szúrjon be egy sort a Col1dbo.VariableTest-ba, amely tartalmazza a $(tablename)értéket.
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
A sqlcmd parancssorban, ha nincs beállítva változó, amely egyenlő $(tablename)értékével, az alábbi utasítások visszaadják a sort, és visszaadják a "'tablename' szkriptváltozó nincs definiálva" üzenetet is. Alapértelmezés szerint a sqlcmd kapcsoló nincs beállítva -b értékre. Ha -b van beállítva, sqlcmd a "nem definiált változó" hiba után leáll.
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Itt van az eredmény.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Figyelembe véve, hogy a MyVar változó értéke $(tablename)-re van állítva.
6> :setvar MyVar $(tablename)
Ezek az utasítások visszaadják a sort, és a "tablename" szkriptelési változó nem definiált üzenetét is visszaadják.
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Ezek az utasítások visszaadják a sort.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Kapcsolódó tartalom
- További információ az sqlcmd (Go) segédprogramról a GitHubon
- Gyors kezdés: SQL Server Linux-konténerképek futtatása a Dockerrel
- Az sqlcmd segédprogram indítása
- T-SQL végrehajtása szkriptfájlból sqlcmd használatával
- használja a segédprogramot
- Sqlcmd használata szkriptelési változókkal
- Csatlakozás SQL Serverhez sqlcmd használatával
- SQLCMD-szkriptek szerkesztése a Lekérdezésszerkesztővel
- Feladat lépéseinek kezelése
- Hozzon létre egy CmdExec-feladatlépést