Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Med sqlcmd-verktyget kan du ange Transact-SQL-instruktioner, systemprocedurer och skriptfiler.
Notera
Information om vilken variant och version av sqlcmd som är installerad på systemet finns i Kontrollera installerad version av sqlcmd-verktyget. Information om hur du hämtar sqlcmd finns i Ladda ned och installera sqlcmd-verktyget.
Skriptvariabler i sqlcmd
Variabler som används i skript kallas skriptvariabler. Med skriptvariabler kan ett skript användas i flera scenarier. Om du till exempel vill köra ett skript mot flera servrar kan du i stället för att ändra skriptet för varje server använda en skriptvariabel för servernamnet. Genom att ändra servernamnet som anges i skriptvariabeln kan samma skript köras på olika servrar.
Skriptvariabler kan definieras explicit med hjälp setvar
av kommandot eller implicit med hjälp sqlcmd -v
av alternativet .
Den här artikeln innehåller även exempel som definierar miljövariabler på kommandoraden med hjälp SET
av .
Ange skriptvariabler med setvar-kommandot
Kommandot setvar
definierar skriptvariabler. Variabler som definieras med hjälp setvar
av kommandot lagras internt. Skriptvariabler bör inte förväxlas med miljövariabler som definieras i kommandotolken med hjälp av SET
. Om ett skript refererar till en variabel som inte är en miljövariabel eller inte definieras med hjälp setvar
av returneras ett felmeddelande och körningen av skriptet stoppas. Mer information finns i alternativet -b
i sqlcmd.
Variabelprioritet (låg till hög)
Om fler än en typ av variabel har samma namn används variabeln med högsta prioritet.
- Miljövariabler på systemnivå
- Miljövariabler på användarnivå
- Kommandoskalet (
SET X=Y
) anges vid kommandoraden innan sqlcmd startar. sqlcmd -v X=Y
:Setvar X Y
Notera
Om du vill visa miljövariablerna i Windows 11 öppnar du Inställningar, navigerar sedan till System>om och väljer länken Avancerade systeminställningar . I fönstret Systemegenskaper väljer du Miljövariabler. I Linux skriver du printenv
på kommandoraden och i macOS skriver du env
.
Ange skriptvariabler implicit
När du startar sqlcmd med ett alternativ som har en relaterad sqlcmd variabel, ställs sqlcmd-variabeln implicit in till det värde som anges med hjälp av alternativet. I följande exempel startas sqlcmd
med alternativet -l
. Detta anger implicit variabeln SQLLOGINTIMEOUT
.
sqlcmd -l 60
Du kan också använda alternativet -v
för att ange en skriptvariabel som finns i ett skript. I följande skript (filnamnet är testscript.sql
) är ColumnName
en skriptvariabel.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Du kan sedan ange namnet på den kolumn som du vill returnera med hjälp av alternativet -v
:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Om du vill returnera en annan kolumn med samma skript ändrar du värdet för ColumnName
skriptvariabeln.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Riktlinjer för skriptvariabelnamn och -värden
Tänk på följande riktlinjer när du namnger skriptvariabler:
Variabelnamn får inte innehålla blankstegstecken eller citattecken.
Variabelnamn får inte ha samma formulär som ett variabeluttryck, till exempel $(var).
Skriptvariabler är skiftlägesokänsliga
Notera
Om inget värde tilldelas till en sqlcmd miljövariabel tas variabeln bort. Om du använder
:setvar VarName
utan ett värde rensas variabeln.
Tänk på följande riktlinjer när du anger värden för skriptvariabler:
- Variabelvärden som definieras med hjälp av
setvar
eller-v
-alternativet måste omges av citattecken om strängvärdet innehåller blanksteg. - Om citattecken ingår i variabelvärdet måste de vara undantagna. Till exempel: :
setvar MyVar "spac""e"
.
Riktlinjer för cmd.exe SET-variabelvärden och -namn
Variabler som definieras med hjälp av SET
är en del av den cmd.exe miljön och kan refereras av sqlcmd. Tänk på följande riktlinjer:
- Variabelnamn får inte innehålla blankstegstecken eller citattecken.
- Variabelvärden kan innehålla blanksteg eller citattecken.
sqlcmd-skriptvariabler
Variabel | Relaterat alternativ | R/W | Förval |
---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
Defaultlokalinstans |
SQLCMDWORKSTATION |
-H |
R
2 |
Datornamn |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (sekunder) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = vänta på obestämd tid |
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" = obegränsat |
SQLCMDEDITOR |
R/W
3 |
edit.com | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD och SQLCMDSERVER anges när :Connect
används.
2 R anger att värdet bara kan anges en gång under programinitieringen.
3 R/W anger att värdet kan återställas med hjälp setvar
av kommandot och efterföljande kommandon använder det nya värdet.
Exempel
Kodexemplen i den här artikeln använder AdventureWorks2022
- eller AdventureWorksDW2022
-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Använda setvar-kommandot i ett skript
Många sqlcmd- alternativ kan styras i ett skript med hjälp av kommandot setvar. I följande exempel skapas skriptet test.sql
där variabeln SQLCMDLOGINTIMEOUT
anges till 60
sekunder och en annan skriptvariabel, server
, är inställd på testserver
. Följande kod finns i test.sql
.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Skriptet anropas sedan med hjälp av sqlcmd:
sqlcmd -i c:\test.sql
B. Använda setvar-kommandot interaktivt
I följande exempel visas hur du ställer in en skriptvariabel interaktivt med hjälp av kommandot setvar
.
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Här är resultatet.
Changed database context to 'AdventureWorks2022'
1>
C. Använd miljövariabler för kommandotolken inom sqlcmd
I följande exempel sätts fyra miljövariabler are
och anropas sedan från sqlcmd.
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. Använda miljövariabler på användarnivå i sqlcmd
I följande exempel ställs användarnivåmiljövariabeln %Temp%
in vid kommandotolken och överförs till indatafilen sqlcmd
. Om du vill hämta miljövariabeln på användarnivå i Kontrollpanelendubbelklickar du på System. Välj fliken Avancera och välj sedan Miljövariabler.
Följande kod finns i indatafilen C:\testscript.txt
:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Följande kod anges i kommandotolken:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Följande resultat skickas till utdatafilen C:\Documents and Settings\<user>\Local Settings\Temp\output.txt
.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Använda ett startskript
Ett sqlcmd- startskript körs när sqlcmd- startas. I följande exempel anges miljövariabeln SQLCMDINI
. Det här är innehållet i init.sql.
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
Detta anropar init.sql
-filen när sqlcmd
startas.
SET sqlcmdini=c:\init.sql
sqlcmd
Det här är resultatet.
1> <user> is connected to <server> (9.00.2047.00)
Notera
Alternativet -X
inaktiverar funktionen för startskript.
F. Variabelutvidgning
I följande exempel visas hur du arbetar med data i form av en sqlcmd variabel.
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Infoga en rad i Col1
av dbo.VariableTest
som innehåller värdet $(tablename)
.
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
Vid sqlcmd
-prompten, när ingen variabel anges som lika med $(tablename)
, returnerar följande instruktioner raden och visar även meddelandet "'tablename' skriptvariabel inte definierad." Som standard anges inte flaggan sqlcmd-b
. Om -b
anges avslutas sqlcmd- efter felet "variabeln inte definierad".
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Här är resultatet.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Med tanke på att variabeln MyVar
är inställd på $(tablename)
.
6> :setvar MyVar $(tablename)
Dessa instruktioner returnerar raden och returnerar även meddelandet "'tablename' skriptvariabel inte definierad".
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Dessa satser returnerar raden.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Relaterat innehåll
- Läs mer om verktyget sqlcmd (Go) på GitHub
- Snabbstart: köra SQL Server-containeravbildningar på Linux med Docker
- Starta sqlcmd-verktyget
- Köra T-SQL från en skriptfil med sqlcmd
- använda verktyget
- Använda sqlcmd med skriptvariabler
- Ansluta till SQL Server med sqlcmd
- Redigera SQLCMD-skript med Frågeredigeraren
- Hantera arbetssteg
- Skapa ett CmdExec-jobbsteg