Dela via


sqlcmd-verktyg

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Med verktyget sqlcmd kan du ange Transact-SQL-instruktioner, systemprocedurer och skriptfiler via olika lägen:

  • Vid kommandotolken.
  • I Frågeredigeraren i SQLCMD-läge.
  • I en Windows-skriptfil.
  • I ett jobbsteg för operativsystemet (cmd.exe) i ett SQL Server Agent-jobb.

Anteckning

Även om Microsoft Entra ID är det nya namnet för Azure Active Directory (Azure AD), för att förhindra avbrott i befintliga miljöer, finns Azure AD kvar i vissa hårdkodade element som UI-fält, anslutningsproviders, felkoder och cmdletar. I den här artikeln är de två namnen utbytbara.

sqlcmd-varianter

Det finns två varianter av sqlcmd:

  • sqlcmd (Go): Den go-mssqldb-baserade sqlcmd, ibland formaterad som go-sqlcmd. Den här versionen är ett fristående verktyg som du kan ladda ned oberoende av SQL Server. Den körs i Windows, macOS, Linux och i containrar.

  • sqlcmd (ODBC): Den plattformsjusterade, ODBC-baserade sqlcmd som är tillgänglig med SQL Server eller Microsoft Command Line Utilities och en del av mssql-tools paketet i Linux. Den körs också på Windows, macOS, Linux och i containrar.

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.

Stöd för TDS 8.0

Förhandsversionen av SQL Server 2025 (17.x) introducerar TDS 8.0-stöd för sqlcmd-verktyget .

Syntax

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Mer detaljerad information om sqlcmd syntax och användning finns i ODBC sqlcmd syntax.

Ändringar som bryter bakåtkompatibilitet från sqlcmd (ODBC)

Flera växlar och beteenden ändras i verktyget sqlcmd (Go). Den mest up-to-date-listan över saknade flaggor för bakåtkompatibilitet finns i Prioritera implementering av bakåtkompatibilitetsflaggor GitHub-diskussion.

  • I tidigare versioner av sqlcmd (Go) togs -P-växeln bort tillfälligt och lösenord för SQL Server-autentisering kunde endast anges via följande mekanismer:

    • Miljövariabeln SQLCMDPASSWORD
    • Kommandot :CONNECT
    • När användaren uppmanas att göra det kan han eller hon skriva lösenordet för att slutföra en anslutning
  • -r kräver ett argument för 0 eller 1

  • -R växeln tas bort.

  • -I växeln tas bort. Om du vill inaktivera beteendet för citerade identifierare lägger du till SET QUOTED IDENTIFIER OFF i skripten.

  • -N tar ett strängvärde som kan vara ett av true, falseeller disable för att ange krypteringsvalet. (default är detsamma som att utelämna parametern)

    • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.
    • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.
    • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.
    • Mer information om förhandlingar om klient-/serverkryptering finns i MS-TDS PRELOGIN-.

    Viktig

    I SQL Server 2025 (17.x) Preview -N kan vara o (för optional), m (för mandatory, standard) eller s (för strict). Om du inte inkluderar -N-Nm är (för mandatory) standardvärdet. Det här är en icke-bakåtkompatibel ändring från SQL Server 2022 (16.x) och tidigare versioner.

  • -u Den genererade Unicode-utdatafilen har UTF-16-Little-Endian byteordningsmärke (BOM) skrivet till den.

  • Vissa beteenden som bevarades för att upprätthålla kompatibiliteten med OSQL kan ha ändrats, till exempel justering av kolumnrubriker för vissa datatyper.

  • Alla kommandon måste få plats på en rad, även EXIT. Interaktivt läge söker inte efter öppna parenteser eller citattecken för kommandon och frågar inte efter efterföljande rader. Det här beteendet skiljer sig från ODBC-versionen, vilket gör att frågan som körs av EXIT(query) kan sträcka sig över flera rader.

Anslutningar från verktyget sqlcmd (Go) är begränsade till TCP-anslutningar. Just nu stöds inte namngivna rör i drivrutinen go-mssqldb.

Förbättringar

  • :Connecthar en valfri -G parameter för att välja någon av autentiseringsmetoderna för Azure SQL Database – SqlAuthentication, , ActiveDirectoryDefaultActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, . ActiveDirectoryPassword Mer information finns i Autentisera med Microsoft Entra-ID i sqlcmd. Om -G inte tillhandahålls används integrerad säkerhet eller SQL Server-autentisering, beroende på förekomsten av en -U användarnamnsparameter.

  • Med --driver-logging-level kommandoradsparametern kan du se spårningar från go-mssqldb drivrutinen. Använd 64 för att se alla spårningar.

  • sqlcmd (Go) kan skriva ut resultat med ett lodrätt format. Använd kommandoradsväxeln -F vertical för att ange den. Skriptvariabeln SQLCMDFORMAT styr den också.

    Anteckning

    Detta skiljer sig från växeln -F för sqlcmd (ODBC), som används med -N för att ange värdnamnet i certifikatet.

Alternativ för kommandoraden

I följande tabell visas de kommandoradsalternativ som är tillgängliga i sqlcmd och vilka operativsystem de stöder.

Alternativ för kommandorad Stöds i Windows Stöds i Linux och macOS
Inloggningsrelaterade alternativ
-A Ja Nej
-C Ja Ja
-d db_name Ja Ja
-D Ja Ja
-Jag login_timeout Ja Ja
-E Ja Ja
-g Ja Ja
-G Ja Ja
-H workstation_name Ja Ja
-j Ja Ja
-K application_intent Ja Ja
-M multisubnet_failover Ja Ja
-N Ja Ja
- P-lösenord Ja Ja
-S [protokoll:]server[\instance_name][,port] Ja Ja
-U login_id Ja Ja
-z new_password Ja Ja
-Z new_password Ja Ja
Alternativ för in- och utdata
`-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]` Ja Ja
-i input_file[,input_file2...] Ja Ja
-o output_file Ja Ja
-r[0 | 1] Ja Ja
-R Ja Ja
-u Ja Ja
Alternativ för frågeutförande
-e Ja Ja
-Jag Ja Ja
-q "kommandoradsfråga" Ja Ja
-Q "cmdline query" Ja Ja
-t query_timeout Ja Ja
-v var = värde [ var = värde... ] Ja Nej
-x Ja Ja
Formatalternativ
-h rubriker Ja Ja
-k [1 | 2] Ja Ja
-s col_separator Ja Ja
-w screen_width Ja Ja
-W Ja Ja
-y variable_length_type_display_width Ja Ja
-Y fast_längd_typ_visningsbredd Ja Ja
Alternativ för felrapportering
-b Ja Ja
-m error_level Ja Ja
-V error_severity_level Ja Ja
Diverse alternativ
-en packet_size Ja Ja
-c batch_terminator Ja Ja
-L[c] Ja Nej
-p[1] Ja Ja
-X[1] Ja Ja
-? Ja Ja

-En

Gäller för: Endast Windows. Linux och macOS stöds inte.

Loggar in på SQL Server med en dedikerad administratörsanslutning (DAC). Den här typen av anslutning används för att felsöka en server. Den här anslutningen fungerar endast med serverdatorer som stöder DAC. Om DAC inte är tillgängligt genererar sqlcmd ett felmeddelande och avslutar sedan. Mer information om DAC finns i Diagnostikanslutning för databasadministratörer. Alternativet -A stöds inte med alternativet -G. När du ansluter till Azure SQL Database med hjälp av -Amåste du vara administratör på den logiska SQL-servern. DAC är inte tillgängligt för en Microsoft Entra-administratör.

Anteckning

Information om hur du skapar en dedikerad administratörsanslutning (DAC) i macOS eller Linux finns i Programmeringsriktlinjer.

-C

Det här alternativet används av klienten för att konfigurera det så att det implicit litar på servercertifikatet utan validering. Det här alternativet motsvarar alternativet ADO.NET TRUSTSERVERCERTIFICATE = true.

För verktyget sqlcmd (Go) gäller även följande villkor:

  • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.
  • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.
  • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.

-d db_name

Utfärdar en USE <db_name>-instruktion när du startar sqlcmd. Det här alternativet anger sqlcmd skriptvariabel SQLCMDDBNAME. Den här parametern anger den första databasen. Standardvärdet är inloggningens standarddatabasegenskap. Om databasen inte finns genereras ett felmeddelande och sqlcmd avslutas.

-D

Tolkar servernamnet som anges för -S som ett DSN i stället för ett värdnamn. Mer information finns i DSN-stöd i sqlcmd och bcp.

Anteckning

Alternativet -D är endast tillgängligt på Linux- och macOS-klienter. På Windows-klienter refererar det till ett föråldrat alternativ som har tagits bort och ignoreras.

-Jag login_timeout

Anger antalet sekunder innan en sqlcmd-inloggning till ODBC-drivrutinen tidsgränsen går ut när du försöker ansluta till en server. Det här alternativet anger sqlcmd skriptvariabel SQLCMDLOGINTIMEOUT. Standardtidsgränsen för inloggning till sqlcmd är 8 sekunder. När du använder alternativet för att ansluta till Azure SQL Database eller Azure Synapse Analytics och autentisera -G med Microsoft Entra-ID rekommenderas ett timeout-värde på minst 30 sekunder. Tidsgränsen för inloggning måste vara ett tal mellan 0 och 65534. Om det angivna värdet inte är numeriskt eller inte tillhör det intervallet genererar sqlcmd ett felmeddelande. Värdet 0 anger att tidsgränsen ska vara oändlig.

-E

Använder en betrodd anslutning i stället för att använda ett användarnamn och lösenord för att logga in på SQL Server. Som standard använder -E det betrodda anslutningsalternativet utan att anges.

Alternativet -E ignorerar möjliga inställningar för användarnamn och lösenordsmiljövariabler, till exempel SQLCMDPASSWORD. Om alternativet -E används tillsammans med alternativet -U eller alternativet -P genereras ett felmeddelande.

Anteckning

Mer information om hur du skapar betrodda anslutningar som använder integrerad autentisering från en Linux- eller macOS-klient finns i Använda integrerad autentisering.

-g

Anger inställningen Kolumnkryptering till Enabled. Mer information finns i Always Encrypted. Endast huvudnycklar som lagras i Windows Certificate Store stöds. Alternativet -g kräver minst sqlcmd version 13.1. För att fastställa din version kör du sqlcmd -?.

-G

Det här alternativet används av klienten när du ansluter till Azure SQL Database eller Azure Synapse Analytics för att ange att användaren autentiseras med Microsoft Entra-autentisering. Det här alternativet anger sqlcmd skriptvariabel SQLCMDUSEAAD = true. Alternativet -G kräver minst sqlcmd version 13.1. För att fastställa din version kör du sqlcmd -?. Mer information finns i Microsoft Entra-autentisering för Azure SQL. Alternativet -A stöds inte med alternativet -G.

Alternativet -G gäller endast för Azure SQL Database och Azure Synapse Analytics.

Interaktiv Microsoft Entra-autentisering stöds för närvarande inte i Linux eller macOS. Microsoft Entra-integrerad autentisering kräver nedladdning av ODBC-drivrutin för SQL Server version 17.6.1 eller senare och en korrekt konfigurerad Kerberos-miljö.

Mer information om Microsoft Entra-autentisering finns i Autentisera med Microsoft Entra-ID i sqlcmd.

-H workstation_name

Ett arbetsstationsnamn. Det här alternativet anger sqlcmd skriptvariabel SQLCMDWORKSTATION. Namnet på arbetsstationen visas i kolumnen hostname i sys.sysprocesses katalogvyn och kan returneras med hjälp av den lagrade proceduren sp_who. Om det här alternativet inte anges är standardvärdet det aktuella datornamnet. Det här namnet kan användas för att identifiera olika sqlcmd- sessioner.

-j

Skriver ut råa felmeddelanden på skärmen.

-K ansökningsavsikt

Deklarerar programarbetsbelastningstypen när du ansluter till en server. Det enda värde som stöds för närvarande är ReadOnly. Om -K inte anges stöder sqlcmd inte anslutning till en sekundär replik i en tillgänglighetsgrupp. Mer information finns i Avlasta enbart läsbar arbetsbelastning till en sekundär replik i en Always On-tillgänglighetsgrupp.

Anteckning

-K stöds inte i SUSE Linux Enterprise Server (SLES). Du kan dock ange nyckelordet ApplicationIntent=ReadOnly i en DSN-fil som skickas till sqlcmd. För mer information, se DSN-stöd i sqlcmd och bcp senare i den här artikeln.

Mer information finns i Hög tillgänglighet och haveriberedskap i Linux och macOS.

-M multisubnet_failover

Ange alltid -M när du ansluter till tillgänglighetsgruppens lyssnare för en SQL Server-tillgänglighetsgrupp eller en SQL Server-redundansklusterinstans. -M ger snabbare identifiering av och anslutning till den (för närvarande) aktiva servern. Om -M inte har angetts är -M inaktiverat.

Mer information finns i:

Anteckning

-M stöds inte i SUSE Linux Enterprise Server (SLES). Du kan dock ange nyckelordet MultiSubnetFailover=Yes i en DSN-fil som skickas till sqlcmd. För mer information, se DSN-stöd i sqlcmd och bcp senare i den här artikeln.

Mer information finns i Hög tillgänglighet och haveriberedskap i Linux och macOS.

-N

Det här alternativet används av klienten för att begära en krypterad anslutning.

För verktyget -N (Go) tar du ett strängvärde som kan vara ett av true, falseeller disable för att ange krypteringsvalet. (default är detsamma som att utelämna parametern):

Anteckning

I Linux och macOS [s|m|o] har lagts till i sqlcmd 18.0. -N kan vara o (för optional), m (för mandatory, standard) eller s (för strict). I förhandsversionen av SQL Server 2025 (17.x) är -N standard (för -Nm) om du inte inkluderar mandatory. Det här är en icke-bakåtkompatibel ändring från SQL Server 2022 (16.x) och tidigare versioner, där -No är standardvärdet.

  • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.

  • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.

  • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.

  • I sqlcmd (ODBC) använder du -F för att ange värdnamnet i certifikatet. Till exempel:

    sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
    

    Anteckning

    Detta skiljer sig från växeln -F för sqlcmd (Go), som används för att skriva ut resultat med ett lodrätt format.

-P lösenord

Ett användarangivet lösenord. Lösenord är skiftlägeskänsliga. Om alternativet -U används, och alternativet -P inte används, och miljövariabeln SQLCMDPASSWORD inte har angetts, uppmanar sqlcmd användaren att ange ett lösenord. Vi rekommenderar inte att du använder ett null-lösenord (tomt) men du kan ange null-lösenordet med hjälp av ett par sammanhängande dubbla citattecken för parametervärdet ("").

Viktig

Användning av -P bör betraktas som osäkert. Undvik att ange lösenordet på kommandoraden. Du kan också använda miljövariabeln SQLCMDPASSWORD eller interaktivt ange lösenordet genom att utelämna alternativet -P.

Vi rekommenderar att du använder ett starkt lösenord.

Lösenordsprompten visas genom att skriva ut lösenordsprompten till konsolen på följande sätt: Password:

Användarindata är dolda. Det innebär att ingenting visas och markören förblir på plats.

Med miljövariabeln SQLCMDPASSWORD kan du ange ett standardlösenord för den aktuella sessionen. Därför behöver lösenord inte hårdkodas i batchfiler. I följande exempel anges först variabeln SQLCMDPASSWORD i kommandotolken och kommer sedan åt verktyget sqlcmd.

I kommandotolken skriver du följande kommando. Ersätt <password> med ett giltigt lösenord.

SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd

Om kombinationen av användarnamn och lösenord är felaktig genereras ett felmeddelande.

Anteckning

Miljövariabeln OSQLPASSWORD behålls för bakåtkompatibilitet. Miljövariabeln SQLCMDPASSWORD har företräde framför OSQLPASSWORD miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

Om alternativet -P används med alternativet -E genereras ett felmeddelande.

Om alternativet -P följs av fler än ett argument genereras ett felmeddelande och programmet avslutas.

Ett lösenord som innehåller specialtecken kan generera ett felmeddelande. Du bör undvika specialtecken när du använder -Peller använda miljövariabeln SQLCMDPASSWORD i stället.

I Linux och macOS, när det -G används med alternativet utan -U, -P anger en fil som innehåller en åtkomsttoken (v17.8+). Tokenfilen ska vara i UTF-16LE-format (ingen BOM).

Åtkomsttoken kan hämtas via olika metoder. Du måste se till att åtkomsttoken är korrekt byte för byte eftersom den skickas as-is. Följande är ett exempelkommando som hämtar en åtkomsttoken. Kommandot använder Azure CLI- och Linux-kommandona och sparar den i en fil i rätt format. Om systemets eller terminalens standardkodning inte är ASCII eller UTF-8 kan du behöva justera iconv alternativen. Se till att noggrant skydda den resulterande filen och ta bort den när den inte längre behövs.

az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile

-S [protokoll:]server[\instans_namn][,port]

Anger den instans av SQL Server som du vill ansluta till. Den anger sqlcmd skriptvariabel SQLCMDSERVER.

Ange server_name för att ansluta till standardinstansen av SQL Server på serverdatorn. Ange server_name[\instance_name] för att ansluta till en namngiven instans av SQL Server på den serverdatorn. Om ingen serverdator har angetts ansluter sqlcmd till standardinstansen av SQL Server på den lokala datorn. Det här alternativet krävs när du kör sqlcmd från en fjärrdator i nätverket.

protokoll kan vara tcp (TCP/IP), lpc (delat minne) eller np (namngivna pipes).

Om du inte anger en server_name[\instance_name] när du startar sqlcmdsöker SQL Server efter och använder miljövariabeln SQLCMDSERVER.

Anteckning

Miljövariabeln OSQLSERVER behålls för bakåtkompatibilitet. Miljövariabeln SQLCMDSERVER har företräde framför OSQLSERVER miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

ODBC-drivrutinen i Linux och macOS kräver -S. Det enda giltiga protokollvärdet är tcp.

-U login_id

Inloggningsnamnet eller det inneslutna databasanvändarnamnet. För användare av enskilda databaser måste du ange databasnamnalternativet (-d).

Anteckning

Miljövariabeln OSQLUSER behålls för bakåtkompatibilitet. Miljövariabeln SQLCMDUSER har företräde framför OSQLUSER miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

Om du inte anger antingen alternativet -U eller alternativet -P försöker sqlcmd ansluta med Windows-autentiseringsläge. Autentiseringen baseras på Windows-kontot för användaren som kör sqlcmd.

Om alternativet -U används med alternativet -E (beskrivs senare i den här artikeln) genereras ett felmeddelande. Om alternativet -U följs av fler än ett argument genereras ett felmeddelande och programmet avslutas.

-z nytt_lösenord

Ändra lösenordet. Ersätt <oldpassword> med det gamla lösenordet och <newpassword> med det nya lösenordet.

sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>

-Z nytt_lösenord

Ändra lösenordet och avsluta. Ersätt <oldpassword> med det gamla lösenordet och <newpassword> med det nya lösenordet.

sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>

Alternativ för in- och utdata

-f kodsida | i:kodsidetabell[,o:kodsidetabell] | o:kodsidetabell[,i:kodsidetabell]

Anger in- och utdatakodsidorna. Kodsidans nummer är ett numeriskt värde som anger en installerad Windows-kodsida.

Kodsideskonverteringsregler:

  • Om inga kodsidor anges använder sqlcmd den aktuella kodsidan för både indata- och utdatafiler, såvida inte indatafilen är en Unicode-fil, i vilket fall ingen konvertering krävs.

  • sqlcmd identifierar automatiskt både big-endian- och little-endian-format för Unicode-indatafiler. Om alternativet -u anges är utdata alltid lite endianska Unicode.

  • Om ingen utdatafil har angetts är utdatakodsidan konsolens kodsida. Med den här metoden kan utdata visas korrekt i konsolen.

  • Flera indatafiler antas ha samma kodsida. Unicode- och icke-Unicode-indatafiler kan blandas.

Ange chcp i kommandotolken för att verifiera kodsidan för cmd.exe.

Anteckning

I Linux är kodsidesnumret ett numeriskt värde som anger en installerad Linux-kodsida (tillgänglig sedan 17.5.1.1).

-i input_file[,input_file2...]

Identifierar filen som innehåller en batch med Transact-SQL-instruktioner eller lagrade procedurer. Flera filer kan anges som läs- och bearbetas i ordning. Använd inga blanksteg mellan filnamn. sqlcmd kontrollerar först om alla angivna filer finns. Om en eller flera filer inte finns sqlcmd avslutas. Alternativen -i och -Q/-q är ömsesidigt uteslutande.

Anteckning

Om du använder -i alternativet följt av en eller flera extra parametrar måste du använda ett blanksteg mellan parametern och värdet. Det här är ett känt problem i sqlcmd (Go).

Sökvägsexempel:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

Filsökvägar som innehåller blanksteg måste omges av citattecken.

Det här alternativet kan användas mer än en gång:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o utdatafil

Identifierar filen som tar emot utdata från sqlcmd.

Om -u anges lagras output_file i Unicode-format. Om filnamnet inte är giltigt genereras ett felmeddelande och sqlcmd avslutas. sqlcmd stöder inte samtidig skrivning av flera sqlcmd- processer till samma fil. Filutdata är skadade eller felaktiga. Alternativet -f är också relevant för filformat. Den här filen skapas om den inte finns. En fil med samma namn från en tidigare sqlcmd session skrivs över. Filen som anges här är inte den stdout filen. Om en stdout fil anges används inte den här filen.

Sökvägsexempel:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Filsökvägar som innehåller blanksteg måste omges av citattecken.

-r[0 | 1]

Omdirigerar felmeddelanden till skärmen (stderr). Om du inte anger en parameter eller om du anger 0omdirigeras endast felmeddelanden som har en allvarlighetsgrad på 11 eller högre. Om du anger 1omdirigeras alla felmeddelandeutdata, inklusive PRINT. Det här alternativet har ingen effekt om du använder -o. Som standard skickas meddelanden till stdout.

Anteckning

För verktyget sqlcmd (Go) kräver -r ett argument för 0 eller 1.

-R

gäller endast för: ODBC sqlcmd.

Gör att sqlcmd anpassar numeriska kolumner, valuta, datum och tidskolumner som hämtats från SQL Server efter klientens nationella inställningar. Som standard visas dessa kolumner med hjälp av serverns regionala inställningar.

Anteckning

På Linux och macOS används -R för närvarande endast en_US (amerikansk engelska) formatering.

-u

Anger att output_file lagras i Unicode-format, oavsett formatet för input_file.

Anteckning

För verktyget sqlcmd (Go) har den genererade Unicode-utdatafilen fått Byte-order mark (BOM) för UTF-16 Little-Endian skriven till sig.

Frågekörningsalternativ

-e

Skriver indataskript till standardutdataenheten (stdout).

-Jag

gäller endast för: ODBC sqlcmd.

Anger anslutningsalternativet SET QUOTED_IDENTIFIER till ON. Standardinställningen är OFF. Mer information finns i SET QUOTED_IDENTIFIER.

Anteckning

Om du vill inaktivera beteendet för citerade identifierare i verktyget sqlcmd (Go) lägger du till SET QUOTED IDENTIFIER OFF i skripten.

-q "kommandoradsförfrågan"

Kör en fråga när sqlcmd startar, men avslutar inte sqlcmd när frågan är klar. Flera semikolonavgränsade frågor kan köras. Använd citattecken runt frågan, som du ser i följande exempel.

I kommandotolken skriver du:

sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Viktig

Använd inte GO terminatorn i sökfrågan.

Om -b anges tillsammans med det här alternativet avslutas sqlcmd- vid fel. -b beskrivs någon annanstans i den här artikeln.

-Q "kommandoradsfråga"

Kör en fråga när sqlcmd startar och sedan omedelbart avslutar sqlcmd. Flera semikolonavgränsade fråge kan köras.

Använd citattecken runt frågan, som du ser i följande exempel.

I kommandotolken skriver du:

sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Viktig

Använd inte GO terminatorn i sökfrågan.

Om -b anges tillsammans med det här alternativet avslutas sqlcmd- vid fel. -b beskrivs någon annanstans i den här artikeln.

-t fråge_timeout

Anger antalet sekunder innan ett kommando (eller Transact-SQL-instruktion) överskrider tidsgränsen. Det här alternativet anger sqlcmd skriptvariabel SQLCMDSTATTIMEOUT. Om ett query_timeout värde inte har angetts löper kommandot inte ut. query_timeout måste vara ett tal mellan 1 och 65534. Om det angivna värdet inte är numeriskt eller inte tillhör det intervallet genererar sqlcmd ett felmeddelande.

Anteckning

Det faktiska tidsgränsvärdet kan variera från det angivna query_timeout värdet med flera sekunder.

-v var = värde [ var = värde... ]

Gäller för: Endast Windows. Linux och macOS stöds inte.

Skapar en sqlcmd skriptvariabel som kan användas i ett sqlcmd- skript.

Omge värdet med citattecken om värdet innehåller blanksteg. Du kan ange flera <var>="<value>" värden. Om det finns fel i något av de angivna värdena genererar sqlcmd ett felmeddelande och avslutas.

sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"

-x

Orsakar sqlcmd- att ignorera skriptvariabler. Den här parametern är användbar när ett skript innehåller många INSERT-instruktioner som kan innehålla strängar som har samma format som vanliga variabler, till exempel $(<variable_name>).

Formatalternativ

-h rubriker

Anger antalet rader som ska skrivas ut mellan kolumnrubrikerna. Standardvärdet är att skriva ut rubriker en gång för varje uppsättning frågeresultat. Det här alternativet anger sqlcmd skriptvariabel SQLCMDHEADERS. Använd -1 för att ange att rubriker inte ska skrivas ut. Alla värden som inte är giltiga gör att sqlcmd generera ett felmeddelande och sedan avsluta.

-k [1 | 2]

Tar bort alla kontrolltecken, till exempel flikar och nya radtecken från utdata. Den här parametern bevarar kolumnformatering när data returneras.

  • -k tar bort kontrolltecken.
  • -k1 ersätter varje kontrolltecken med ett mellanslag.
  • -k2 ersätter på varandra följande kontrolltecken med ett enda blanksteg.

-s kol_separator

Anger kolumnavgränsarens tecken. Standardvärdet är ett tomt utrymme. Det här alternativet anger sqlcmd skriptvariabel SQLCMDCOLSEP. Om du vill använda tecken som har särskild betydelse för operativsystemet, till exempel et-et (&) eller semikolon (;), omger du tecknet inom citattecken ("). Kolumnavgränsaren kan vara valfritt 8-bitarstecken.

-w skärmbredd

Anger skärmbredden för utdata. Det här alternativet anger sqlcmd skriptvariabel SQLCMDCOLWIDTH. Kolumnbredden måste vara ett tal som är större än 8 och mindre än 65536. Om den angivna kolumnbredden inte hamnar i det intervallet genererar sqlcmd ett felmeddelande. Standardbredden är 80 tecken. När en utdatarad överskrider den angivna kolumnbredden omsluts den till nästa rad.

-W

Det här alternativet tar bort avslutande blanksteg från en kolumn. Använd det här alternativet tillsammans med alternativet -s när du förbereder data som ska exporteras till ett annat program. Det går inte att använda med alternativen -y eller -Y.

-y variabel_längd_typ_visningsbredd

Anger sqlcmd-skriptvariabeln SQLCMDMAXVARTYPEWIDTH. Standardvärdet är 256. Det begränsar antalet tecken som returneras för datatyperna med stor variabel längd:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • XML
  • användardefinierade datatyper (UDT)
  • SMS
  • ntext
  • bild

UDT kan vara av fast längd beroende på implementeringen. Om längden på en UDT med fast längd är kortare än display_widthpåverkas inte värdet på den returnerade UDT:n. Om längden överstiger display_width, förkortas utdata.

Försiktighet

Använd alternativet -y 0 med extrem försiktighet eftersom det kan orsaka betydande prestandaproblem på både servern och nätverket, beroende på storleken på de data som returneras.

-Y fastlängd_typ_visningsbredd

Anger sqlcmd-skriptvariabeln SQLCMDMAXFIXEDTYPEWIDTH. Standardvärdet är 0 (obegränsat). Begränsar antalet tecken som returneras för följande datatyper:

  • char(n), där 1 <= n<= 8000
  • nchar(n), där 1 <= n<= 4000
  • varchar(n), där 1 <= n<= 8000
  • nvarchar(n), där 1 <= n<= 4000
  • varbinary(n), där 1 <= n<= 4000
  • sql_variant

Alternativ för felrapportering

-b

Anger att sqlcmd avslutar och returnerar ett DOS ERRORLEVEL värde när ett fel inträffar. Värdet som returneras till variabeln ERRORLEVEL är 1 när SQL Server-felmeddelandet har en allvarlighetsgrad som är större än 10. annars returneras värdet 0. Om alternativet -V anges, utöver -b, rapporterar sqlcmd inte ett fel om allvarlighetsgraden är lägre än de värden som anges med hjälp av -V. Batchfiler för kommandotolken kan testa värdet för ERRORLEVEL och hantera felet på rätt sätt. sqlcmd rapporterar inte fel för allvarlighetsgrad 10 (informationsmeddelanden).

Om skriptet sqlcmd innehåller en felaktig kommentar, syntaxfel eller saknar en skriptvariabel ERRORLEVEL returneras 1.

-m error_level

Styr vilka felmeddelanden som skickas till stdout. Meddelanden som har en allvarlighetsgrad som är större än eller lika med den här nivån skickas. När det här värdet är inställt på -1skickas alla meddelanden, inklusive informationsmeddelanden. Mellanslag är inte tillåtna mellan -m och -1. Till exempel är -m-1 giltigt och -m -1 inte är det.

Det här alternativet anger även sqlcmd skriptvariabel SQLCMDERRORLEVEL. Den här variabeln har standardvärdet 0.

-V felnivåallvarlighet

Styr allvarlighetsgraden som används för att ange variabeln ERRORLEVEL. Felmeddelanden som har allvarlighetsnivåer som är större än eller lika med den här värdeuppsättningen ERRORLEVEL. Värden som är mindre än 0 rapporteras som 0. Batch- och CMD-filer kan användas för att testa värdet för variabeln ERRORLEVEL.

Diverse alternativ

-paketstorlek

Begär ett paket med en annan storlek. Det här alternativet anger sqlcmd skriptvariabel SQLCMDPACKETSIZE. packet_size måste vara ett värde mellan 512 och 32767. Standardvärdet är 4096. En större paketstorlek kan förbättra prestanda för körning av skript som har många Transact-SQL-instruktioner mellan GO kommandon. Du kan begära en större paketstorlek. Men om begäran nekas använder sqlcmd serverns standardvärde för paketstorlek.

-c batch_terminator

Anger tecknet för batch-slut. Som standard avslutas kommandon och skickas till SQL Server genom att skriva ordet GO på en rad på egen hand. När du återställer batchavslutaren ska du inte använda Transact-SQL reserverade nyckelord eller tecken som har särskild betydelse för operativsystemet, även om de föregås av ett omvänt snedstreck.

-L[c]

Gäller för: Endast Windows. Linux och macOS stöds inte.

Visar en lista över lokalt konfigurerade serverdatorer och namnen på de serverdatorer som sänder i nätverket. Den här parametern kan inte användas i kombination med andra parametrar. Det maximala antalet serverdatorer som kan visas är 3 000. Om serverlistan förkortas på grund av buffertens storlek visas ett varningsmeddelande.

Anteckning

På grund av typen av sändning i nätverk kanske sqlcmd inte får ett snabbt svar från alla servrar. Därför kan listan över servrar som returneras variera för varje anrop av det här alternativet.

Om den valfria parametern c anges visas utdata utan Servers: rubrikrad och varje serverrad visas utan inledande blanksteg. Den här presentationen kallas för rent resultat. Rensa utdata förbättrar bearbetningsprestandan för skriptspråk.

-p[1]

Skriver ut prestandastatistik för varje resultatuppsättning. Följande visning är ett exempel på formatet för prestandastatistik:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Var:

  • x = Antal transaktioner som bearbetas av SQL Server.
  • t1 = Total tid för alla transaktioner.
  • t2 = Genomsnittlig tid för en enskild transaktion.
  • t3 = Genomsnittligt antal transaktioner per sekund.

Alla tider är i millisekunder.

Om den valfria parametern 1 anges är utdataformatet för statistiken i kolonavgränsat format som enkelt kan importeras till ett kalkylblad eller bearbetas av ett skript.

Om den valfria parametern är något annat värde än 1genereras ett fel och sqlcmd avslutas.

-X[1]

Inaktiverar kommandon som kan äventyra systemsäkerheten när sqlcmd körs från en batchfil. De inaktiverade kommandona känns fortfarande igen. sqlcmd utfärdar ett varningsmeddelande och fortsätter. Om den valfria parametern 1 anges genererar sqlcmd ett felmeddelande och avslutas. Följande kommandon inaktiveras när alternativet -X används:

  • ED
  • !! kommando

Om alternativet -X anges förhindrar det att miljövariabler skickas vidare till sqlcmd-. Det förhindrar också att startskriptet som anges med hjälp av SQLCMDINI skriptvariabeln körs. Mer information om sqlcmd skriptvariabler finns i sqlcmd – Använd med skriptvariabler.

-?

Visar versionen av sqlcmd och en syntaxsammanfattning av sqlcmd- alternativ.

Anteckning

På macOS kör du sqlcmd '-?' (med citattecken) i stället.

Anmärkningar

Alternativ behöver inte användas i den ordning som visas i syntaxavsnittet.

Anteckning

Om du använder -i alternativet följt av en eller flera extra parametrar måste du använda ett blanksteg mellan parametern och värdet. Det här är ett känt problem i sqlcmd (Go).

När flera resultat returneras skriver sqlcmd ut en tom rad mellan varje resultatuppsättning i en batch. Dessutom visas inte <x> rows affected-meddelandet när det inte gäller det uttryck som exekveras.

Om du vill använda sqlcmd interaktivt skriver du sqlcmd i kommandotolken med något eller flera av de alternativ som beskrivs tidigare i den här artikeln. Mer information finns i Använda sqlcmd.

Anteckning

Alternativen -l, -Q, -Z eller -i gör att sqlcmd avslutas efter att ha körts.

Den totala längden på sqlcmd kommandoraden i kommandomiljön (till exempel cmd.exe eller bash), inklusive alla argument och expanderade variabler, bestäms av det underliggande operativsystemet.

DSN-stöd i sqlcmd och bcp

Du kan ange ett namn på datakällan (DSN) i stället för ett servernamn i sqlcmd eller bcp -S alternativet (eller sqlcmd :Connect kommandot) om du anger -D. -D gör att sqlcmd eller bcp ansluter till den server som anges i DSN med alternativet -S .

System-DSN lagras i odbc.ini filen i ODBC-katalogen SysConfigDir (/etc/odbc.ini på standardinstallationer). Användar-DSN lagras i .odbc.ini en användares hemkatalog (~/.odbc.ini).

I Windows-system lagras system- och användar-DSN:er i registret och hanteras via odbcad32.exe. bcp och sqlcmd stöder inte fil-DSN.

Se DSN och nyckelord och attribut för anslutningssträngar för listan över poster som drivrutinen stöder.

I ett DSN krävs endast DRIVER posten, men för att ansluta till en fjärrserver behöver sqlcmd eller bcp ett värde i elementet SERVER . Om elementet SERVER är tomt eller inte finns i DSN försöker sqlcmd och bcp ansluta till standardinstansen i det lokala systemet.

När du använder bcp på Windows-system kräver SQL Server 2017 (14.x) och tidigare versioner SQL Native Client 11-drivrutinen (sqlncli11.dll), medan SQL Server 2019 (15.x) och senare versioner kräver Microsoft ODBC Driver 17 för SQL Server-drivrutinen (msodbcsql17.dll).

Om samma alternativ anges i både DSN och kommandoraden sqlcmd eller bcp åsidosätter kommandoradsalternativet det värde som används i DSN. Om DSN till exempel har en DATABASE post och sqlcmd-kommandoraden innehåller -danvänds värdet som skickas till -d . Om Trusted_Connection=yes anges i DSN används Kerberos-autentisering. Användarnamn (-U) och lösenord (-P), om det anges, ignoreras.

Befintliga skript som anropar isql kan ändras så att de använder sqlcmd genom att definiera följande alias: alias isql="sqlcmd -D".

metodtips för sqlcmd

Använd följande metoder för att maximera säkerhet och effektivitet.

  • Använd integrerad säkerhet.

  • Använd -X[1] i automatiserade miljöer.

  • Skydda indata- och utdatafiler med hjälp av lämpliga filsystembehörigheter.

  • För att öka prestandan gör du så mycket i en sqlcmd session som du kan, i stället för i en serie sessioner.

  • Ange tidsgränsvärden för batch- eller frågekörning högre än du förväntar dig att det tar att köra batchen eller frågan.

Använd följande metoder för att maximera korrektheten:

  • Använd -V 16 för att logga eventuella allvarlighetsgrad 16-nivåmeddelanden. Allvarlighetsgrad 16-meddelanden anger allmänna fel som kan korrigeras av användaren.

  • Kontrollera slutkoden och DOS ERRORLEVEL variabeln när processen har avslutats. sqlcmd returnerar normalt 0; annars ställs ERRORLEVEL in enligt konfigurationen av -V. Med andra ord bör ERRORLEVEL inte förväntas vara samma värde som felnumret som rapporteras från SQL Server. Felnumret är ett SQL Server-specifikt värde som motsvarar systemfunktionen @@ERROR. ERRORLEVEL är ett sqlcmd--specifikt värde som anger varför sqlcmd avslutades och dess värde påverkas av att ange -b kommandoradsargument.

Att använda -V 16 i kombination med att kontrollera utgångskoden och DOS ERRORLEVEL kan hjälpa till att fånga fel i automatiserade miljöer, särskilt kvalitetsgrindar före en produktversion.