Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-database in Microsoft Fabric
Met het hulpprogramma sqlcmd kunt u Transact-SQL instructies, systeemprocedures en scriptbestanden invoeren.
Opmerking
Zie Geïnstalleerde versie van het sqlcmd-hulpprogramma controleren om erachter te komen welke variant en versie van sqlcmd op uw systeem is geïnstalleerd. Zie Het hulpprogramma sqlcmd downloaden en installeren voor meer informatie over het ophalen van sqlcmd.
Naast Transact-SQL instructies in sqlcmdzijn ook de volgende opdrachten beschikbaar:
GO [ <count> ]:List[:]RESET:Error- 
              
[:]ED1 :Out[:]!!:Perftrace[:]QUIT:Connect[:]EXIT:On Error:r:Help- 
              
:ServerList1 - 
              
:XML [ ON | OFF ]1 :Setvar:Listvar
1 Niet ondersteund in Linux of macOS.
Let op het volgende wanneer u sqlcmd opdrachten gebruikt:
Alle sqlcmd opdrachten, met uitzondering van
GO, moeten worden voorafgegaan door een dubbele punt (:).Belangrijk
Om de compatibiliteit met bestaande osql-scripts te behouden, worden sommige opdrachten herkend zonder de dubbele punt, zoals aangegeven door de
:.sqlcmd opdrachten worden alleen herkend als deze worden weergegeven aan het begin van een regel.
Alle sqlcmd opdrachten zijn niet hoofdlettergevoelig.
Elke opdracht moet op een afzonderlijke regel staan. Een opdracht kan niet worden gevolgd door een Transact-SQL instructie of een andere opdracht.
Opdrachten worden onmiddellijk uitgevoerd. Ze worden niet zoals Transact-SQL-instructies in de uitvoeringsbuffer geplaatst.
Bewerkingsopdrachten
[:]Eerste hulp
Hiermee start u de teksteditor. Deze editor kan worden gebruikt om de huidige Transact-SQL batch of de laatst uitgevoerde batch te bewerken. Als u de laatst uitgevoerde batch wilt bewerken, moet de opdracht ED direct worden getypt nadat de laatste batch de uitvoering heeft voltooid.
De teksteditor wordt gedefinieerd door de omgevingsvariabele SQLCMDEDITOR. De standaardeditor is Edit. Als u de editor wilt wijzigen, stelt u de omgevingsvariabele SQLCMDEDITOR in. Als u bijvoorbeeld de editor wilt instellen op Microsoft Kladblok, typt u bij de opdrachtprompt:
SET SQLCMDEDITOR=notepad
[:]TERUGSTELLEN
Leegt de verklaring cache.
:Lijst
Hiermee wordt de inhoud van de verklaringscache weergegeven.
Variabelen
:Setvar <var> [ "waarde" ]
Definieert sqlcmd scriptvariabelen. Scriptvariabelen hebben de volgende indeling: $(VARNAME).
Variabelenamen zijn niet hoofdlettergevoelig.
Scriptvariabelen kunnen op de volgende manieren worden ingesteld:
- Impliciet gebruikend een opdrachtregeloptie. Met de optie 
-lwordt bijvoorbeeld de variabeleSQLCMDLOGINTIMEOUTsqlcmd ingesteld. - Expliciet met behulp van de opdracht 
:Setvar. - Een omgevingsvariabele definiëren voordat u sqlcmd uitvoert.
 
Opmerking
De optie -X voorkomt dat omgevingsvariabelen worden doorgegeven aan sqlcmd-.
Als een variabele die is gedefinieerd met behulp van :Setvar en een omgevingsvariabele dezelfde naam heeft, heeft de variabele die is gedefinieerd met behulp van :Setvar voorrang.
Namen van variabelen mogen geen spatietekens bevatten.
Namen van variabelen kunnen niet hetzelfde formulier hebben als een variabeleexpressie, zoals $(var).
Als de tekenreekswaarde van de scriptvariabele lege spaties bevat, plaatst u de waarde tussen aanhalingstekens. Als er geen waarde voor een scriptvariabele is opgegeven, wordt de scriptvariabele verwijderd.
:Listvar
Geeft een lijst weer van de scriptvariabelen die momenteel zijn ingesteld.
Opmerking
Alleen scriptvariabelen die zijn ingesteld door sqlcmd en variabelen die zijn ingesteld met behulp van de :Setvar opdracht, worden weergegeven.
Uitvoeropdrachten
:Fout <bestandsnaam> | STDERR | STDOUT
Alle foutuitvoer omleiden naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. De opdracht :Error kan meerdere keren in een script worden weergegeven. Standaard wordt foutuitvoer verzonden naar stderr.
bestandsnaam
Hiermee maakt en opent u een bestand dat de uitvoer ontvangt. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. Als het bestand niet beschikbaar is vanwege machtigingen of andere redenen, wordt de uitvoer niet overgeschakeld en verzonden naar de laatst opgegeven of standaardbestemming.
STDERR
Hiermee schakelt u foutuitvoer naar de
stderrstream. Als uitvoer is omgeleid, ontvangt het doel waarnaar de stream wordt omgeleid de foutuitvoer.STDOUT
Hiermee schakelt u foutuitvoer naar de
stdoutstream. Als de uitvoer is omgeleid, ontvangt het doel waarnaar de stream is omgeleid de foutuitvoer.
:Out <bestandsnaam> | STDERR | STDOUT
Hiermee worden alle queryresultaten omgeleid naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. Standaard wordt uitvoer verzonden naar stdout. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. De opdracht :Out kan meerdere keren in een script worden weergegeven.
:Perftrace <bestandsnaam> | STDERR | STDOUT
Hiermee worden alle prestatietraceringsgegevens gemaakt en omgeleid naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. Standaard wordt de uitvoer van prestatietracering verzonden naar stdout. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. De opdracht :Perftrace kan meerdere keren in een script worden weergegeven.
Opdrachten voor uitvoeringsbeheer
:Bij foutmelding [ afsluiten | negeren ]
Hiermee stelt u de actie in die moet worden uitgevoerd wanneer er een fout optreedt tijdens het uitvoeren van een script of batch.
Wanneer de optie exit wordt gebruikt, wordt sqlcmd afgesloten met de juiste foutwaarde.
Wanneer de optie ignore wordt gebruikt, negeert sqlcmd de fout en gaat verder met het uitvoeren van de batch of het script. Standaard wordt een foutbericht afgedrukt.
[:]AFSLUITEN
Zorgt ervoor dat sqlcmd wordt afgesloten.
[:]EXIT [ ( verklaring ) ]
Hiermee kunt u het resultaat van een SELECT-instructie als retourwaarde gebruiken in de sqlcmd. Als de numerieke waarde is, wordt de eerste kolom van de laatste resultaatrij geconverteerd naar een geheel getal van 4 bytes (lang). MS-DOS, Linux en macOS geven de lage byte door naar het foutniveau van het bovenliggende proces of besturingssysteem. Windows 2000 en latere versies geven het gehele getal van 4 bytes door. De syntaxis is :EXIT(query).
Voorbeeld:
:EXIT(SELECT @@ROWCOUNT)
U kunt ook de parameter :EXIT opnemen als onderdeel van een batchbestand. Typ bijvoorbeeld bij de opdrachtprompt:
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
Het hulpprogramma sqlcmd verzendt alles tussen de haakjes (()) naar de server. Als een systeem opgeslagen procedure een set selecteert en een waarde retourneert, wordt alleen de selectie geretourneerd. De :EXIT() instructie met niets tussen de haakjes voert alles uit voordat deze in de batch wordt uitgevoerd en sluit vervolgens af zonder retourwaarde.
Wanneer een onjuiste query is opgegeven, sqlcmd wordt afgesloten zonder een retourwaarde.
Hier volgt een lijst met EXIT formaten:
:EXITDe batch wordt niet uitgevoerd en wordt vervolgens onmiddellijk afgesloten en retourneert geen waarde.
:EXIT( )Voert de batch uit en beëindigt en geeft geen waarde terug.
:EXIT(query)Hiermee wordt de batch uitgevoerd die de query bevat en wordt vervolgens afgesloten nadat de resultaten van de query zijn geretourneerd.
Als RAISERROR wordt gebruikt in een sqlcmd script en er een status van 127 wordt gegenereerd, wordt sqlcmd afgesloten en wordt de bericht-id teruggezet naar de client. Voorbeeld:
RAISERROR(50001, 10, 127)
Deze fout zorgt ervoor dat het sqlcmd--script wordt beëindigd en de bericht-id 50001 naar de client wordt geretourneerd.
De retourwaarden -1 aan -99 zijn gereserveerd door SQL Server en sqlcmd- definieert de volgende extra retourwaarden:
| Retourwaarde | Beschrijving | 
|---|---|
-100 | 
Er is een fout opgetreden voordat u een retourwaarde selecteert. | 
-101 | 
Er zijn geen rijen gevonden bij het selecteren van de retourwaarde. | 
-102 | 
Er is een conversiefout opgetreden bij het selecteren van de retourwaarde. | 
GO [aantal]
              GO geeft zowel het einde van een batch aan als de uitvoering van eventuele Transact-SQL-instructies in de cache. De batch wordt meerdere keren uitgevoerd als afzonderlijke batches. U kunt een variabele niet meer dan één keer declareren in één batch.
Diverse opdrachten
:r <bestandsnaam>
Parseert extra Transact-SQL-instructies en sqlcmd-opdrachten uit het door bestandsnaam opgegeven bestand in de instructiecache. bestandsnaam wordt gelezen ten opzichte van de opstartmap waarin sqlcmd- is uitgevoerd.
Als het bestand Transact-SQL-instructies bevat die niet worden gevolgd door GO, moet u GO invoeren op de regel die op :rvolgt.
Het bestand wordt gelezen en uitgevoerd nadat er een batcheindteken is aangetroffen. U kunt meerdere :r opdrachten uitgeven. Het bestand kan elke sqlcmd-opdracht bevatten, inclusief het batcheindteken GO.
Opmerking
Het aantal regels dat in de interactieve modus wordt weergegeven, wordt verhoogd met één voor elke :r opdracht die wordt aangetroffen. De opdracht :r wordt weergegeven in de uitvoer van de lijstopdracht.
:ServerList
Een lijst met de lokaal geconfigureerde servers en de namen van de servers die op het netwerk worden uitgezonden.
:Connect server_name[\instance_name] [-l time-out] [-U user_name [-P password]]
Maakt verbinding met een exemplaar van SQL Server. Sluit ook de huidige verbinding.
Time-outopties:
| Waarde | Gedrag | 
|---|---|
0 | 
Wacht voor altijd | 
n>0 | 
Wacht gedurende en seconden | 
De SQLCMDSERVER scriptvariabele weerspiegelt de huidige actieve verbinding.
Als time-out niet is opgegeven, is de waarde van de variabele SQLCMDLOGINTIMEOUT de standaardwaarde.
Als alleen user_name is opgegeven (als optie of als omgevingsvariabele), wordt de gebruiker gevraagd een wachtwoord in te voeren. Gebruikers worden niet gevraagd of de SQLCMDUSER of SQLCMDPASSWORD omgevingsvariabelen zijn ingesteld. Als u geen opties of omgevingsvariabelen opgeeft, wordt de Windows-verificatiemodus gebruikt om u aan te melden. Als u bijvoorbeeld verbinding wilt maken met een exemplaar, instance1, van SQL Server, myserver, met behulp van geïntegreerde beveiliging, gebruikt u de volgende opdracht:
:connect myserver\instance1
Als u verbinding wilt maken met het standaardexemplaren van myserver met behulp van scriptvariabelen, gebruikt u de volgende instellingen:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! opdracht
Hiermee worden besturingssysteemopdrachten uitgevoerd. Als u een besturingssysteemopdracht wilt uitvoeren, start u een regel met twee uitroeptekens (!!) gevolgd door de opdracht van het besturingssysteem. Voorbeeld:
:!! dir
Opmerking
De opdracht wordt uitgevoerd op de computer waarop sqlcmd wordt uitgevoerd.
:XML [ AAN | UIT ]
Zie XML Output Format en JSON Output Format in dit artikel voor meer informatie.
:Hulp
Een lijst met sqlcmd opdrachten, samen met een korte beschrijving van elke opdracht.
sqlcmd-bestandsnamen
              sqlcmd invoerbestanden kunnen worden opgegeven met de optie -i of de opdracht :r. Uitvoerbestanden kunnen worden opgegeven met de -o optie of de :Error, :Outen :Perftrace opdrachten. Hier volgen enkele richtlijnen voor het werken met deze bestanden:
:Error,:Outen:Perftracemoet afzonderlijke bestandsnaamwaarden gebruiken. Als dezelfde bestandsnaam wordt gebruikt, kunnen invoeren van de opdrachten worden vermengd.Als een invoerbestand dat zich op een externe server bevindt, wordt aangeroepen vanuit sqlcmd op een lokale computer en het bestand een stationspad bevat, zoals
:Out c:\OutputFile.txt, wordt het uitvoerbestand gemaakt op de lokale computer en niet op de externe server.Geldige bestandspaden zijn:
C:\<filename>,\\<Server>\<Share$>\<filename>en"C:\Some Folder\<file name>". Als er een spatie in het pad staat, gebruik aanhalingstekens.Elke nieuwe sqlcmd sessie overschrijft bestaande bestanden met dezelfde namen.
Informatieve berichten
sqlcmd alle informatieberichten afdrukken die door de server worden verzonden. In het volgende voorbeeld wordt, nadat de Transact-SQL instructies zijn uitgevoerd, een informatief bericht afgedrukt.
Start sqlcmd. Typ bij de opdrachtprompt sqlcmd de query:
USE AdventureWorks2022;
GO
Wanneer u op Enterdrukt, wordt het volgende informatieve bericht afgedrukt:
Changed database context to 'AdventureWorks2022'.
Uitvoerformaat van Transact-SQL queries
              sqlcmd drukt eerst een kolomkop af die de kolomnamen bevat die zijn opgegeven in de selectielijst. De kolomnamen worden gescheiden door het SQLCMDCOLSEP teken te gebruiken. Dit kolomscheidingsteken is standaard een spatie. Als de kolomnaam korter is dan de kolombreedte, wordt de uitvoer opgevuld met spaties tot aan de volgende kolom.
Deze regel wordt gevolgd door een scheidingsteken dat een reeks van streepjes is. In de volgende uitvoer ziet u een voorbeeld.
Start sqlcmd. Typ bij de opdrachtprompt sqlcmd de query:
USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID,
               FirstName,
               LastName
FROM Person.Person;
GO
Wanneer u op Enter-drukt, wordt de volgende resultatenset geretourneerd.
BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)
Hoewel de BusinessEntityID kolom slechts vier tekens breed is, wordt deze uitgebreid voor de langere kolomnaam. Standaard wordt de uitvoer beëindigd met 80 tekens. Deze breedte kan worden gewijzigd met behulp van de optie -w of door de SQLCMDCOLWIDTH scriptvariabele in te stellen.
XML-uitvoerindeling
XML-uitvoer die het resultaat is van een FOR XML-component wordt ongeformatteerd uitgevoerd in een continue stroom.
Wanneer u XML-uitvoer verwacht, gebruikt u de volgende opdracht: :XML ON.
Opmerking
              sqlcmd- geeft foutberichten in het gebruikelijke formaat. De foutberichten worden ook uitgegeven in de XML-tekststroom in XML-formaat. Als u :XML ONgebruikt, worden in sqlcmd- geen informatieve berichten weergegeven.
Als u de XML-modus wilt uitschakelen, gebruikt u de volgende opdracht: :XML OFF.
De opdracht GO mag niet voorkomen voordat de opdracht :XML OFF is uitgevoerd, omdat de opdracht :XML OFF sqlcmd  weer naar rijgeoriënteerde uitvoer schakelt.
XML-gegevens (gestreamde) en rijsetgegevens kunnen niet worden gecombineerd. Als de :XML ON opdracht niet is uitgegeven vóór een Transact-SQL instructie die XML-streams uitvoert, wordt de uitvoer vervormd. Zodra de :XML ON opdracht is uitgegeven, kunt u geen Transact-SQL instructies uitvoeren die reguliere rijenets uitvoeren.
Opmerking
De opdracht :XML biedt geen ondersteuning voor de instructie SET STATISTICS XML.
JSON-uitvoerindeling
Wanneer u JSON-uitvoer verwacht, gebruikt u de volgende opdracht: :XML ON. Anders bevat de uitvoer zowel de kolomnaam als de JSON-tekst. Deze uitvoer is geen geldige JSON.
Als u de XML-modus wilt uitschakelen, gebruikt u de volgende opdracht: :XML OFF.
Zie XML-uitvoerindeling in dit artikel voor meer informatie.
Microsoft Entra-verificatie gebruiken
Voorbeelden van Microsoft Entra-verificatie:
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30