Udostępnij za pośrednictwem


narzędzie sqlcmd

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

Narzędzie sqlcmd umożliwia wprowadzanie instrukcji Transact-SQL, procedur systemowych i plików skryptów za pomocą różnych trybów:

  • W wierszu polecenia.
  • W edytorze zapytań w trybie SQLCMD.
  • W pliku skryptu systemu Windows.
  • W systemie operacyjnym (cmd.exe) krok zadania agenta programu SQL Server.

Notatka

Chociaż identyfikator Entra firmy Microsoft to nowa nazwa usługi Azure Active Directory (Azure AD), aby zapobiec zakłócaniu działania istniejących środowisk, usługa Azure AD nadal pozostaje w niektórych zakodowanych na stałe elementach, takich jak pola interfejsu użytkownika, dostawcy połączeń, kody błędów i polecenia cmdlet. W tym artykule dwie nazwy są wymienne.

Dowiedz się, która wersja została zainstalowana

Istnieją dwie wersje sqlcmd:

  • Narzędzie go-mssqldbbazujące na sqlcmd, czasami stylizowane jako go-sqlcmd. Ta wersja jest autonomicznym narzędziem, które można pobrać niezależnie od programu SQL Server.

  • Oparty na ODBC sqlcmdjest dostępny z programem SQL Server lub narzędziami wiersza polecenia firmy Microsoft oraz część pakietu mssql-tools w systemie Linux.

Aby określić zainstalowaną wersję, uruchom następującą instrukcję w wierszu polecenia:

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

Jeśli używasz nowej wersji sqlcmd (Go), dane wyjściowe są podobne do następującego przykładu:

Version: 1.3.1

Sprawdzanie wersji

Aby określić, która wersja jest zainstalowana, można użyć sqlcmd --version. Powinna być zainstalowana co najmniej wersja 1.0.0.

Ważny

Zainstalowanie sqlcmd (Go) za pośrednictwem menedżera pakietów zastępuje wersję sqlcmd (ODBC) wersją sqlcmd (Go) w ścieżce środowiska. Aby można było to zrobić, należy zamknąć i ponownie otworzyć wszystkie bieżące sesje wiersza polecenia. sqlcmd (ODBC) nie zostanie usunięty i nadal może być używany przez określenie pełnej ścieżki do pliku wykonywalnego. Możesz również zaktualizować zmienną PATH, aby wskazać, która z nich ma pierwszeństwo. Aby to zrobić w systemie Windows 11, otwórz ustawienia systemu i przejdź do Informacje o > Zaawansowane ustawienia systemu. Po otwarciu właściwości systemu wybierz przycisk zmiennych środowiskowych. W dolnej połowie w obszarze Zmienne systemowewybierz pozycję Ścieżka, a następnie wybierz pozycję Edytuj. Jeśli lokalizacja sqlcmd (Go) zostanie zapisana na liście (C:\Program Files\sqlcmd jest domyślna) zostanie wyświetlona przed C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn, zostanie użyta sqlcmd (Go). Możesz cofnąć kolejność, aby sqlcmd (ODBC) ponownie stał się domyślnym.

Pobieranie i instalowanie narzędzia sqlcmd

sqlcmd (Go) można zainstalować na wielu platformach w systemach Microsoft Windows, macOS i Linux. Wersje nowsze niż 1.6 mogą nie być dostępne we wszystkich menedżerach pakietów. Nie ma jeszcze szacowanej daty ich dostępności.

winget (interfejs wiersza polecenia menedżera pakietów systemu Windows)

  1. Zainstaluj klienta Menedżera pakietów systemu Windows, jeśli jeszcze go nie masz.

  2. Uruchom następujące polecenie, aby zainstalować sqlcmd (Go).

    winget install sqlcmd
    

Czekoladka

  1. Zainstaluj Chocolatey, jeśli jeszcze go nie masz.

  2. Uruchom następujące polecenie, aby zainstalować sqlcmd (Go).

    choco install sqlcmd
    

Pobieranie bezpośrednie

  1. Pobierz odpowiedni zasób -windows-amd64.zip lub -windows-arm.zip z najnowszej wersji sqlcmd (Go) z repozytorium kodu GitHub.

  2. Wyodrębnij plik sqlcmd.exe z pobranego folderu zip.

Wstępnie zainstalowane

Azure Cloud Shell

Możesz wypróbować narzędzie sqlcmd z poziomu usługi Azure Cloud Shell, ponieważ jest ono domyślnie wstępnie zainstalowane:

Azure Data Studio

Aby uruchomić instrukcje SQLCMD w programie Azure Data Studio, wybierz pozycję Włącz SQLCMD na pasku narzędzi edytora.

SQL Server Management Studio (SSMS)

Aby uruchomić instrukcje SQLCMD w programie SQL Server Management Studio (SSMS), wybierz opcję Tryb SQLCMD z listy rozwijanej w menu zapytań w górnej nawigacji.

Program SSMS używa Microsoft .NET Framework SqlClient do wykonywania w trybie regularnym i SQLCMD w Edytorze Zapytań. Po uruchomieniu sqlcmd z wiersza polecenia sqlcmd używa sterownika ODBC. Ze względu na to, że mogą być stosowane różne opcje domyślne, możesz zauważyć różne zachowanie podczas wykonywania tego samego zapytania w programie SSMS w trybie SQLCMD oraz w narzędziu sqlcmd.

Składnia

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.

Aby uzyskać bardziej szczegółowe informacje na temat składni sqlcmd i używania, zobacz składni sqlcmd ODBC.

Zmiany powodujące niezgodność z polecenia sqlcmd (ODBC)

W narzędziu sqlcmd (Go) zmienia się kilka przełączników i zachowań. Aby uzyskać najbardziej up-to— lista brakujących flag w celu zapewnienia zgodności z poprzednimi wersjami, odwiedź Określanie priorytetów implementacji flag wstecznych zgodności dyskusji w witrynie GitHub.

  • We wcześniejszych wersjach sqlcmd (Go) przełącznik -P został tymczasowo usunięty, a hasła do uwierzytelniania programu SQL Server mogą być udostępniane tylko za pomocą następujących mechanizmów:

    • Zmienna środowiskowa SQLCMDPASSWORD
    • Polecenie :CONNECT
    • Po wyświetleniu monitu użytkownik może wpisać hasło, aby ukończyć połączenie
  • -r wymaga argumentu 0 lub 1

  • Usuwany jest przełącznik -R.

  • Przełącznik -I został usunięty. Aby wyłączyć zachowanie cytowanego identyfikatora, dodaj SET QUOTED IDENTIFIER OFF w swoich skryptach.

  • -N teraz przyjmuje wartość ciągu, która może być jedną z true, falselub disable, aby określić wybór szyfrowania. (default jest taka sama jak pominięcie parametru)

    • Jeśli nie podano -N i -C, sqlcmd negocjuje uwierzytelnianie z serwerem bez sprawdzania poprawności certyfikatu serwera.
    • Jeśli -N jest podana, ale -C nie, sqlcmd wymaga weryfikacji certyfikatu serwera. Wartość false dla szyfrowania może nadal prowadzić do zaszyfrowania pakietu logowania.
    • Jeśli podano zarówno -N, jak i -C, sqlcmd używa ich wartości do negocjacji szyfrowania.
    • Więcej informacji na temat negocjacji szyfrowania klienta/serwera można znaleźć w MS-TDS PRELOGIN.
  • -u Wygenerowany plik wyjściowy Unicode ma zapisany w nim znacznik kolejności bajtów (BOM) UTF-16 Little-Endian.

  • Niektóre zachowania przechowywane w celu zachowania zgodności z OSQL mogą zostać zmienione, takie jak wyrównanie nagłówków kolumn dla niektórych typów danych.

  • Wszystkie polecenia muszą mieścić się w jednym wierszu, nawet EXIT. Tryb interaktywny nie sprawdza, czy polecenia mają otwarte nawiasy lub cudzysłowy, i nie wyświetla monitu do wpisania kolejnych wierszy. To zachowanie różni się od wersji ODBC, która umożliwia uruchamianie zapytania przez EXIT(query) w wielu wierszach.

Połączenia z narzędzia sqlcmd (Go) są ograniczone do połączeń TCP. Kanały nazwane nie są obecnie obsługiwane w sterowniku go-mssqldb.

Ulepszenia

  • :Connect ma teraz opcjonalny parametr -G do wybrania jednej z metod uwierzytelniania dla usługi Azure SQL Database — SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Aby uzyskać więcej informacji, zobacz Microsoft Entra authentication. Jeśli nie podano -G, jest używane zintegrowane zabezpieczenia lub uwierzytelnianie programu SQL Server, w zależności od obecności parametru nazwy użytkownika -U.

  • Nowy parametr wiersza polecenia --driver-logging-level umożliwia wyświetlenie śladów ze sterownika go-mssqldb. Użyj 64, aby wyświetlić wszystkie ślady.

  • sqlcmd można teraz drukować wyniki przy użyciu formatu pionowego. Użyj nowego przełącznika wiersza polecenia -F vertical, aby go ustawić. Zmienna SQLCMDFORMAT skryptów kontroluje ją również.

Opcje wiersza polecenia

-A

Zaloguje się do programu SQL Server przy użyciu dedykowanego połączenia administratora (DAC). Tego rodzaju połączenie służy do rozwiązywania problemów z serwerem. To połączenie działa tylko z komputerami serwerów obsługującymi DAC. Jeśli funkcja DAC nie jest dostępna, sqlcmd generuje komunikat o błędzie, a następnie kończy działanie. Aby uzyskać więcej informacji o DAC, zobacz Połączenie Diagnostyczne dla Administratorów Baz Danych. Opcja -A nie jest obsługiwana w przypadku opcji -G. Podczas nawiązywania połączenia z usługą Azure SQL Database przy użyciu -Amusisz być administratorem na serwerze logicznym SQL. DAC nie jest dostępny dla administratora firmy Microsoft Entra.

-C

Ta opcja jest używana przez klienta do konfigurowania go w celu niejawnego zaufania certyfikatowi serwera bez walidacji. Ta opcja jest odpowiednikiem opcji ADO.NET TRUSTSERVERCERTIFICATE = true.

W przypadku narzędzia sqlcmd (Go) obowiązują również następujące warunki:

  • Jeśli nie podano -N i -C, sqlcmd negocjuje uwierzytelnianie z serwerem bez sprawdzania poprawności certyfikatu serwera.
  • Jeśli -N jest podana, ale -C nie, sqlcmd wymaga weryfikacji certyfikatu serwera. Wartość false używana do szyfrowania nadal może prowadzić do zaszyfrowania pakietu logowania.
  • Jeśli podano zarówno -N, jak i -C, sqlcmd używa ich wartości do negocjacji szyfrowania.

-d db_name

Wydaje instrukcję USE <db_name> podczas uruchamiania sqlcmd. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDDBNAME. Ten parametr określa początkową bazę danych. Wartość domyślna to domyślna właściwość bazy danych logowania. Jeśli baza danych nie istnieje, zostanie wygenerowany komunikat o błędzie i sqlcmd kończy działanie.

-D

Interpretuje nazwę serwera podaną do -S jako nazwę DSN zamiast nazwy hosta. Aby uzyskać więcej informacji, zobacz obsługę DSN w narzędziu sqlcmd i bcp w Łączenie z sqlcmd.

Notatka

Opcja -D jest dostępna tylko na klientach z systemami Linux i macOS. Opcja na klientach systemu Windows wcześniej odnosiła się do obecnie przestarzałej opcji, która została usunięta i jest pomijana.

-l login_timeout

Określa liczbę sekund przed upływem limitu czasu logowania sqlcmd do sterownika ODBC podczas próby połączenia się z serwerem. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDLOGINTIMEOUT. Domyślny limit czasu logowania do sqlcmd wynosi 8 sekund. W przypadku korzystania z opcji -G do nawiązywania połączenia z usługą Azure SQL Database lub Azure Synapse Analytics i uwierzytelniania przy użyciu Microsoft Entra ID, zaleca się ustawienie wartości limitu czasu na co najmniej 30 sekund. Limit czasu logowania musi być liczbą między 0 a 65534. Jeśli podana wartość nie jest liczbowa lub nie mieści się w tym zakresie, sqlcmd generuje komunikat o błędzie. Wartość 0 określa limit czasu, który ma być nieskończony.

-E

Używa zaufanego połączenia zamiast używa nazwy użytkownika i hasła do logowania się do programu SQL Server. Domyślnie, jeśli -E nie jest określone, sqlcmd używa opcji zaufanego połączenia.

Opcja -E ignoruje możliwe ustawienia zmiennej środowiskowej nazwy użytkownika i hasła, takie jak SQLCMDPASSWORD. Jeśli opcja -E jest używana razem z opcją -U lub opcją -P, zostanie wygenerowany komunikat o błędzie.

-g

Ustawia Szyfrowanie kolumny na Enabled. Aby uzyskać więcej informacji, zobacz Always Encrypted. Obsługiwane są tylko klucze główne przechowywane w magazynie certyfikatów systemu Windows. Opcja -g wymaga co najmniej sqlcmd w wersji 13.1. Aby określić wersję, wykonaj sqlcmd -?.

-G

Ta opcja jest używana przez klienta podczas nawiązywania połączenia z usługą Azure SQL Database lub Azure Synapse Analytics w celu określenia, czy użytkownik zostanie uwierzytelniony przy użyciu uwierzytelniania firmy Microsoft Entra. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDUSEAAD = true. Opcja -G wymaga co najmniej sqlcmd w wersji 13.1. Aby określić swoją wersję, wykonaj sqlcmd -?. Aby uzyskać więcej informacji, zobacz Łączenie z bazą danych SQL lub Azure Synapse Analytics za pomocą uwierzytelniania Microsoft Entra. Opcja -A nie jest obsługiwana w przypadku opcji -G.

Opcja -G dotyczy tylko usług Azure SQL Database i Azure Synapse Analytics.

Uwierzytelnianie interakcyjne firmy Microsoft Entra nie jest obecnie obsługiwane w systemie Linux lub macOS. Zintegrowane uwierzytelnianie Microsoft Entra wymaga sterownika Microsoft ODBC Driver 17 dla programu SQL Server w wersji 17.6.1 lub nowszej oraz prawidłowo skonfigurowanego środowiska Kerberos.

Aby uzyskać więcej informacji na temat uwierzytelniania Microsoft Entra, zobacz Microsoft Entra authentication in sqlcmd.

-H workstation_name

Nazwa stacji roboczej. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDWORKSTATION. Nazwa stacji roboczej znajduje się w kolumnie hostname widoku wykazu sys.sysprocesses i może zostać zwrócona przy użyciu procedury składowanej sp_who. Jeśli ta opcja nie jest określona, wartością domyślną jest bieżąca nazwa komputera. Ta nazwa może służyć do identyfikowania różnych sesji sqlcmd.

-j

Wyświetla nieprzetworzone komunikaty o błędach na ekranie.

-K application_intent

Deklaruje typ obciążenia aplikacji podczas nawiązywania połączenia z serwerem. Jedyną obecnie obsługiwaną wartością jest ReadOnly. Jeśli nie określono -K, sqlcmd nie obsługuje łączności z repliką pomocniczą w grupie dostępności. Aby uzyskać więcej informacji, zobacz Aktywne Drugorzędne: Replika Pomocnicza z Możliwością Odczytu (Always On Availability Groups).

-M multisubnet_failover

Zawsze określ -M podczas nawiązywania połączenia ze słuchaczem grupy dostępności SQL Server lub instancją klastra trybu failover SQL Server. -M zapewnia szybsze wykrywanie i nawiązywanie połączenia z (obecnie) aktywnym serwerem. Jeśli nie określono -M, -M jest wyłączona. Aby uzyskać więcej informacji o odbiornikach , łączności klienta,trybu failover aplikacji, tworzeniu i konfigurowaniu grup dostępności (SQL Server), klastra trybu failover i zawsze włączonych grup dostępności (SQL Server)i aktywnych sekund: repliki pomocnicze z możliwością odczytu (zawsze włączone grupy dostępności).

-N

Ta opcja jest używana przez klienta do żądania zaszyfrowanego połączenia.

W przypadku narzędzia sqlcmd (Go) -N teraz przyjmuje wartość ciągu, która może być jedną z true, falselub disable w celu określenia wyboru szyfrowania. (default jest taka sama jak pominięcie parametru):

  • Jeśli nie podano -N i -C, sqlcmd negocjuje uwierzytelnianie z serwerem bez sprawdzania poprawności certyfikatu serwera.
  • Jeśli -N jest podana, ale -C nie, sqlcmd wymaga weryfikacji certyfikatu serwera. Wartość false szyfrowania może nadal prowadzić do szyfrowania pakietu logowania.
  • Jeśli podano zarówno -N, jak i -C, sqlcmd używa ich wartości do negocjacji szyfrowania.

-P hasło

Hasło określone przez użytkownika. W hasłach jest rozróżniana wielkość liter. Jeśli jest używana opcja -U i opcja -P nie jest używana, a zmienna środowiskowa SQLCMDPASSWORD nie została ustawiona, sqlcmd monituje użytkownika o podanie hasła. Nie zalecamy używania hasła o wartości null (pustej), ale można określić hasło o wartości null przy użyciu pary ciągłych podwójnych cudzysłowów dla wartości parametru ("").

Ważny

Używanie -P należy uznać za niezabezpieczone. Unikaj podawania hasła w wierszu polecenia. Alternatywnie użyj zmiennej środowiskowej SQLCMDPASSWORD lub interaktywnie wprowadź hasło, pomijając opcję -P.

Zalecamy użycie silnego hasła.

Monit o hasło jest wywoływany przez wydrukowanie go na konsoli w następujący sposób: Password:

Dane wejściowe użytkownika są ukryte. Oznacza to, że nic nie jest wyświetlane, a kursor pozostaje w pozycji.

Zmienna środowiskowa SQLCMDPASSWORD umożliwia ustawienie domyślnego hasła dla bieżącej sesji. W związku z tym hasła nie muszą być zakodowane w plikach wsadowych. Poniższy przykład najpierw ustawia zmienną SQLCMDPASSWORD w wierszu polecenia, a następnie uzyskuje dostęp do narzędzia sqlcmd.

W wierszu polecenia wpisz:

SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd

Jeśli nazwa użytkownika i kombinacja hasła są niepoprawne, zostanie wygenerowany komunikat o błędzie.

Notatka

Zmienna środowiskowa OSQLPASSWORD została zachowana w celu zapewnienia zgodności z poprzednimi wersjami. Zmienna środowiskowa SQLCMDPASSWORD ma pierwszeństwo przed zmienną środowiskową OSQLPASSWORD. Oznacza to, że sqlcmd i osql mogą być używane obok siebie bez zakłóceń. Stare skrypty nadal działają.

Jeśli opcja -P jest używana z opcją -E, zostanie wygenerowany komunikat o błędzie.

Jeśli po -P następuje więcej niż jeden argument, zostanie wygenerowany komunikat o błędzie i program zakończy działanie.

Hasło zawierające znaki specjalne może wygenerować komunikat o błędzie. W przypadku używania -Pnależy użyć znaków specjalnych lub użyć zmiennej środowiskowej SQLCMDPASSWORD.

-S [protocol:]server[\nazwa_instancji][,port]

Określa wystąpienie SQL Server, z którym należy się połączyć. Ustawia zmienną skryptową sqlcmdSQLCMDSERVER.

Określ server_name, aby nawiązać połączenie z domyślnym wystąpieniem programu SQL Server na tym serwerze. Określ server_name[\instance_name] w celu nawiązania połączenia z nazwanym wystąpieniem programu SQL Server na tym komputerze serwera. Jeśli nie określono komputera serwera, sqlcmd nawiązuje połączenie z domyślnym wystąpieniem programu SQL Server na komputerze lokalnym. Ta opcja jest wymagana podczas wykonywania sqlcmd z komputera zdalnego w sieci.

protokół może być tcp (TCP/IP), lpc (pamięć współdzielona) lub np (nazwane potoki).

Jeśli nie określisz server_name[\instance_name] podczas uruchamiania sqlcmd, program SQL Server sprawdza i używa zmiennej środowiskowej SQLCMDSERVER.

Notatka

Zmienna środowiskowa OSQLSERVER została zachowana w celu zapewnienia zgodności z poprzednimi wersjami. Zmienna środowiskowa SQLCMDSERVER ma pierwszeństwo przed zmienną środowiskową OSQLSERVER. Oznacza to, że sqlcmd i osql mogą być używane obok siebie bez zakłóceń. Stare skrypty nadal działają.

-U identyfikator_logowania

Nazwa logowania lub nazwa użytkownika zawartej bazy danych. W przypadku użytkowników zawartej bazy danych należy podać opcję nazwy bazy danych (-d).

Notatka

Zmienna środowiskowa OSQLUSER została zachowana w celu zapewnienia zgodności z poprzednimi wersjami. Zmienna środowiskowa SQLCMDUSER ma pierwszeństwo przed zmienną środowiskową OSQLUSER. Oznacza to, że sqlcmd i osql mogą być używane obok siebie bez zakłóceń. Stare skrypty nadal działają.

Jeśli nie określisz opcji -U lub opcji -P, sqlcmd próbuje nawiązać połączenie przy użyciu trybu uwierzytelniania systemu Windows. Uwierzytelnianie jest oparte na koncie systemu Windows użytkownika, który uruchamia sqlcmd.

Jeśli opcja -U jest używana z opcją -E (opisaną w dalszej części tego artykułu), zostanie wygenerowany komunikat o błędzie. Jeśli po -U następuje więcej niż jeden argument, zostanie wygenerowany komunikat o błędzie i program zakończy działanie.

-z nowe_hasło

Zmień hasło:

sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

-Z nowe_hasło

Zmień hasło i zakończ pracę:

sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

Opcje danych wejściowych/wyjściowych

-f strona kodowa | i:strona kodowa[,o:strona kodowa] | o:strona kodowa[,i:strona kodowa]

Określa strony kodu wejściowego i wyjściowego. Numer strony kodowej to wartość liczbowa określająca zainstalowaną stronę kodową systemu Windows.

Reguły konwersji strony kodowej:

  • Jeśli nie określono żadnych stron kodu, sqlcmd używa bieżącej strony kodowej dla plików wejściowych i wyjściowych, chyba że plik wejściowy jest plikiem Unicode, w tym przypadku nie jest wymagana konwersja.

  • sqlcmd automatycznie rozpoznaje zarówno pliki wejściowe Big-Endian, jak i Little-Endian Unicode. Jeśli określono opcję -u, dane wyjściowe są zawsze w formacie little-endian w formacie Unicode.

  • Jeśli nie określono pliku wyjściowego, strona kodowa danych wyjściowych jest stroną kodową konsoli. To podejście umożliwia poprawne wyświetlanie danych wyjściowych w konsoli.

  • Zakłada się, że wiele plików wejściowych ma tę samą stronę kodową. Pliki wejściowe w formacie Unicode i w formatach innych niż Unicode mogą być mieszane.

Wprowadź chcp w wierszu polecenia, aby zweryfikować stronę kodową cmd.exe.

-i input_file[,input_file2...]

Identyfikuje plik zawierający zestaw instrukcji Transact-SQL lub procedur składowanych. Można określić wiele plików, które są odczytywane i przetwarzane w kolejności. Nie używaj spacji między nazwami plików. sqlcmd najpierw sprawdza, czy istnieją wszystkie określone pliki. Jeśli co najmniej jeden plik nie istnieje, sqlcmd kończy działanie. Opcje -i i -Q/-q wykluczają się wzajemnie.

Notatka

Jeśli używasz opcji -i, po której następuje co najmniej jeden dodatkowy parametr, musisz użyć odstępu między parametrem a wartością. Jest to znany problem w sqlcmd (Go).

Przykłady ścieżek:

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

Ścieżki plików zawierające spacje muszą być ujęte w znaki cudzysłowu.

Ta opcja może być używana więcej niż raz:

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

-o output_file

Identyfikuje plik odbierający dane wyjściowe z sqlcmd.

Jeśli określono -u, output_file jest przechowywany w formacie Unicode. Jeśli nazwa pliku jest nieprawidłowa, zostanie wygenerowany komunikat o błędzie i sqlcmd kończy działanie. sqlcmd nie obsługuje współbieżnego zapisywania wielu procesów sqlcmd do tego samego pliku. Dane wyjściowe pliku są uszkodzone lub niepoprawne. Opcja -f jest również odpowiednia dla formatów plików. Ten plik jest tworzony, jeśli nie istnieje. Plik o tej samej nazwie z poprzedniej sesji sqlcmd jest zastępowany. Określony tutaj plik nie jest plikiem stdout. Jeśli zostanie określony plik stdout, ten plik nie jest używany.

Przykłady ścieżek:

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

Ścieżki plików zawierające spacje muszą być ujęte w znaki cudzysłowu.

-r[0 | 1]

Przekierowuje dane wyjściowe komunikatu o błędzie na ekran (stderr). Jeśli nie określisz parametru lub określisz 0, przekierowywane są tylko komunikaty o błędach, które mają poziom ważności 11 lub wyższy. Jeśli określisz 1, wszystkie komunikaty o błędach, w tym PRINT, są przekierowywane. Ta opcja nie ma wpływu, jeśli używasz -o. Domyślnie komunikaty są wysyłane do stdout.

Uwaga

W przypadku narzędzia sqlcmd (Go) -r wymaga argumentu 0 lub 1.

-R

Dotyczy: tylko odBC sqlcmd.

Sprawia, że sqlcmd lokalizuje kolumny liczbowe, walutowe, daty i godziny pobrane z programu SQL Server na podstawie ustawień regionalnych klienta. Domyślnie te kolumny są wyświetlane przy użyciu ustawień regionalnych serwera.

-u

Określa, że output_file jest przechowywany w formacie Unicode, niezależnie od formatu input_file.

Notatka

W przypadku narzędzia sqlcmd (Go) wygenerowany plik wyjściowy Unicode ma zapisany w nim znacznik kolejności bajtów (BOM) UTF-16 Little-Endian.

Opcje wykonywania zapytań

-e

Zapisuje skrypty wejściowe na standardowym urządzeniu wyjściowym (stdout).

-Ja

Dotyczy: ODBC tylko sqlcmd.

Ustawia opcję połączenia SET QUOTED_IDENTIFIER na wartość ON. Domyślnie jest ustawiona wartość OFF. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER (Transact-SQL).

Notatka

Aby wyłączyć obsługę identyfikatorów ujętych w cudzysłów w narzędziu sqlcmd (Go), dodaj SET QUOTED IDENTIFIER OFF w swoich skryptach.

-q "zapytanie cmdline"

Wykonuje zapytanie po uruchomieniu sqlcmd, ale nie kończy sqlcmd po zakończeniu działania zapytania. Można wykonywać wiele zapytań rozdzielanych średnikami. Użyj cudzysłowów wokół zapytania, jak pokazano w poniższym przykładzie.

W wierszu polecenia wpisz:

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;"

Ważny

Nie używaj terminatora GO w zapytaniu.

Jeśli -b jest określona razem z tą opcją, sqlcmd kończy działanie po błędzie. -b jest opisany w innym miejscu w tym artykule.

-Q "zapytanie w linii poleceń"

Wykonuje zapytanie, gdy sqlcmd jest uruchamiany, a następnie natychmiast kończy działanie sqlcmd. Można wykonywać wiele zapytań rozdzielanych średnikami.

Użyj cudzysłowów wokół zapytania, jak pokazano w poniższym przykładzie.

W wierszu polecenia wpisz:

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;"

Ważny

Nie używaj terminatora GO w zapytaniu.

Jeśli -b jest określona razem z tą opcją, sqlcmd kończy działanie po błędzie. -b jest opisany w innym miejscu w tym artykule.

-t limit_czasu_zapytania

Określa liczbę sekund przed upływem limitu czasu polecenia (lub instrukcji Transact-SQL). Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDSTATTIMEOUT. Jeśli nie określono wartości query_timeout, polecenie nie przekroczy limitu czasu. query_timeout musi być liczbą między 1 a 65534. Jeśli podana wartość nie jest liczbowa lub nie mieści się w tym zakresie, sqlcmd generuje komunikat o błędzie.

Notatka

Rzeczywista wartość limitu czasu może się różnić od określonej wartości query_timeout o kilka sekund.

-v var = wartość [ var = wartość... ]

Tworzy zmienną skryptową sqlcmd, która może być używana w skrypcie sqlcmd. Jeśli wartość zawiera spacje, należy ująć wartość w cudzysłów. Można określić wiele wartości <var>="<value>". Jeśli występują błędy w dowolnej z określonych wartości, sqlcmd generuje komunikat o błędzie, a następnie kończy działanie.

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

Powoduje, że sqlcmd ignoruje zmienne skryptowe. Ten parametr jest przydatny, gdy skrypt zawiera wiele instrukcji INSERT, które mogą zawierać ciągi, które mają taki sam format jak zmienne regularne, takie jak $(<variable_name>).

Opcje formatowania

-h nagłówki

Określa liczbę wierszy do wydrukowania między nagłówkami kolumn. Wartość domyślna to drukowanie nagłówków jednorazowo dla każdego zestawu wyników zapytania. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDHEADERS. Użyj -1, aby określić, że nagłówki nie są drukowane. Każda nieprawidłowa wartość powoduje, że sqlcmd generuje komunikat o błędzie, a następnie kończy pracę.

-k [1 | 2]

Usuwa wszystkie znaki sterujące, takie jak tabulatory i znaki nowej linii z danych wyjściowych. Ten parametr zachowuje formatowanie kolumn po zwracaniu danych.

  • -k usuwa znaki sterujące.
  • -k1 zastępuje każdy znak kontrolki spacją.
  • -k2 zastępuje ciągi znaków sterujących pojedynczą spacją.

-s col_separator

Określa znak separatora kolumny. Wartość domyślna to puste miejsce. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDCOLSEP. Aby użyć znaków, które mają specjalne znaczenie dla systemu operacyjnego, takich jak ampersand (&) lub średnik (;), należy ująć znak w cudzysłów ("). Separatorem kolumny może być dowolny znak 8-bitowy.

-w screen_width

Określa szerokość ekranu dla danych wyjściowych. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDCOLWIDTH. Szerokość kolumny musi być liczbą większą niż 8 i mniejszą niż 65536. Jeśli określona szerokość kolumny nie mieści się w tym zakresie, sqlcmd generuje komunikat o błędzie. Domyślna szerokość to 80 znaków. Gdy wiersz wyjściowy przekracza określoną szerokość kolumny, opakowuje się do następnego wiersza.

-W

Ta opcja usuwa spacje końcowe z kolumny. Użyj tej opcji razem z opcją -s podczas przygotowywania danych, które mają zostać wyeksportowane do innej aplikacji. Nie można używać z opcjami -y ani -Y.

-y variable_length_type_display_width

Ustawia zmienną skryptową sqlcmdSQLCMDMAXVARTYPEWIDTH. Wartość domyślna to 256. Ogranicza liczbę znaków zwracanych dla dużych typów danych o zmiennej długości:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • zdefiniowane przez użytkownika typy danych (UTT)
  • tekst
  • ntext
  • obrazu

Trasy zdefiniowane przez użytkownika mogą być o stałej długości w zależności od implementacji. Jeśli długość UDT o stałej długości jest krótsza niż display_width, zwracana wartość UDT nie jest zmieniana. Jeśli jednak długość jest dłuższa niż display_width, dane wyjściowe są obcięte.

Ostrożność

Użyj opcji -y 0 z wyjątkową ostrożnością, ponieważ może to spowodować znaczne problemy z wydajnością zarówno na serwerze, jak i w sieci, w zależności od rozmiaru zwracanych danych.

-Y wyświetlanie_szerokości_typu_o_stałej_długości

Ustawia zmienną skryptową sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. Wartość domyślna to 0 (nieograniczona). Ogranicza liczbę znaków zwracanych dla następujących typów danych:

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

Opcje raportowania błędów

-b

Określa, że sqlcmd kończy działanie i zwraca wartość DOS ERRORLEVEL po wystąpieniu błędu. Wartość zwrócona do zmiennej ERRORLEVEL jest 1, gdy komunikat o błędzie programu SQL Server ma poziom ważności większy niż 10; w przeciwnym razie zwracana wartość jest 0. Jeśli opcja -V została ustawiona oprócz -b, sqlcmd nie zgłasza błędu, jeśli poziom ważności jest niższy niż wartości ustawione przy użyciu -V. Pliki wsadowe wiersza polecenia mogą testować wartość ERRORLEVEL i odpowiednio obsługiwać błąd. sqlcmd nie zgłasza błędów na poziomie ważności 10 (komunikaty informacyjne).

Jeśli skrypt sqlcmd zawiera niepoprawny komentarz, błąd składniowy lub brakuje zmiennej skryptowej, zwracana ERRORLEVEL jest 1.

-m poziom_błędu

Określa, które komunikaty o błędach są wysyłane do stdout. Wysyłane są komunikaty o poziomie ważności większym lub równym temu poziomowi. Po ustawieniu tej wartości na -1są wysyłane wszystkie komunikaty, w tym komunikaty informacyjne. Spacje nie są dozwolone między -m a -1. Na przykład -m-1 jest prawidłowa, a -m -1 nie.

Ta opcja ustawia również zmienną skryptów sqlcmdSQLCMDERRORLEVEL. Ta zmienna ma wartość domyślną 0.

-V error_severity_level

Określa poziom surowości używany do ustawienia zmiennej ERRORLEVEL. Komunikaty o błędach z poziomami ważności większymi lub równymi wartościom z zestawu ERRORLEVEL. Wartości mniejsze niż 0 są zgłaszane jako 0. Pliki usługi Batch i CMD mogą służyć do testowania wartości zmiennej ERRORLEVEL.

Różne opcje

-a rozmiar_pakietu

Żąda pakietu o innym rozmiarze. Ta opcja ustawia zmienną skryptową sqlcmdSQLCMDPACKETSIZE. packet_size musi być wartością z zakresu od 512 do 32767. Wartość domyślna to 4096. Większy rozmiar pakietu może zwiększyć wydajność wykonywania skryptów, które mają wiele instrukcji Transact-SQL między GO poleceniami. Możesz zażądać większego rozmiaru pakietu. Jeśli jednak żądanie zostanie odrzucone, sqlcmd używa domyślnego serwera dla rozmiaru pakietu.

-c zakończenie_partii

Określa terminator wsadowy. Domyślnie polecenia są zakończone i wysyłane do SQL Server przez wpisanie słowa GO na osobnej linii. Podczas resetowania terminatora wsadowego nie należy używać Transact-SQL zastrzeżonych słów kluczowych ani znaków, które mają specjalne znaczenie dla systemu operacyjnego, nawet jeśli są poprzedzone ukośnikiem odwrotnym.

-L[c]

Wyświetla listę komputerów serwera skonfigurowanych lokalnie oraz nazwy komputerów serwera, które nadają w sieci. Tego parametru nie można używać w połączeniu z innymi parametrami. Maksymalna liczba komputerów serwera, które można wymienić, to 3000. Jeśli lista serwerów zostanie obcięta z powodu rozmiaru buforu, zostanie wyświetlony komunikat ostrzegawczy.

Notatka

Ze względu na charakter emisji w sieciach sqlcmd może nie odbierać terminowej odpowiedzi ze wszystkich serwerów. W związku z tym lista zwracanych serwerów może się różnić w przypadku każdego wywołania tej opcji.

Jeśli określono opcjonalny parametr c, dane wyjściowe będą wyświetlane bez wiersza nagłówka Servers:, a każdy wiersz serwera jest wyświetlany bez spacji wiodących. Ta prezentacja jest nazywana czystymi danymi wyjściowymi. Czyste dane wyjściowe zwiększają wydajność przetwarzania języków skryptów.

-p[1]

Drukuje statystyki wydajności dla każdego zestawu wyników. Poniżej przedstawiono przykład formatu statystyk wydajności:

Network packet size (bytes): n

x xact[s]:

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

Gdzie:

  • x = liczba transakcji przetwarzanych przez program SQL Server.
  • t1 = łączny czas dla wszystkich transakcji.
  • t2 = średni czas dla pojedynczej transakcji.
  • t3 = średnia liczba transakcji na sekundę.

Wszystkie czasy są w milisekundach.

Jeśli określono opcjonalny parametr 1, format wyjściowy statystyk jest w formacie rozdzielanym dwukropkiem, który można łatwo zaimportować do arkusza kalkulacyjnego lub przetworzyć przez skrypt.

Jeśli opcjonalny parametr jest dowolną wartością inną niż 1, zostanie wygenerowany błąd i sqlcmd kończy działanie.

-X[1]

Wyłącza polecenia, które mogą naruszyć bezpieczeństwo systemu podczas wykonywania sqlcmd z pliku wsadowego. Wyłączone polecenia są nadal rozpoznawane; sqlcmd wyświetla komunikat ostrzegawczy i kontynuuje. Jeśli określono opcjonalny parametr 1, sqlcmd generuje komunikat o błędzie, a następnie kończy działanie. Następujące polecenia są wyłączone, gdy jest używana opcja -X:

  • ED
  • !! polecenie

Jeśli określono opcję -X, uniemożliwia przekazywanie zmiennych środowiskowych do sqlcmd. Zapobiega to również wykonywaniu skryptu uruchamiania określonego przy użyciu zmiennej skryptowej SQLCMDINI. Aby uzyskać więcej informacji na temat zmiennych skryptowych sqlcmd, proszę zobaczyć sqlcmd — użycie ze zmiennymi skryptowymi.

-?

Przedstawia wersję sqlcmd oraz podsumowanie składni opcji sqlcmd.

Notatka

W systemie macOS zamiast tego uruchom sqlcmd '-?' (z cudzysłowami).

Uwagi

Opcje nie muszą być używane w kolejności wyświetlanej w sekcji składni.

Notatka

Jeśli używasz opcji -i, po której następuje co najmniej jeden dodatkowy parametr, musisz użyć odstępu między parametrem a wartością. Jest to znany problem w sqlcmd (Go).

Gdy zostanie zwróconych wiele wyników, sqlcmd wyświetla pusty wiersz między każdym zestawem wyników w partii. Ponadto komunikat <x> rows affected nie jest wyświetlany, gdy nie ma zastosowania do wykonanej instrukcji.

Aby użyć sqlcmd interaktywnie, wpisz sqlcmd w wierszu polecenia przy użyciu dowolnej lub kilku opcji opisanych wcześniej w tym artykule. Aby uzyskać więcej informacji, zobacz Użyj narzędzia sqlcmd

Notatka

Opcje -l, -Q, -Z lub -i powodują, że po wykonaniu sqlcmd kończy działanie.

Łączna długość sqlcmd wiersza polecenia w środowisku poleceń (na przykład cmd.exe lub bash), w tym wszystkie argumenty i rozszerzone zmienne, jest określana przez podstawowy system operacyjny.

Hierarchia priorytetów zmiennych (od niskiej do wysokiej)

  1. Zmienne środowiskowe na poziomie systemu
  2. Zmienne środowiskowe na poziomie użytkownika
  3. Powłoka poleceń (SET X=Y) skonfigurowana w wierszu polecenia przed uruchomieniem sqlcmd
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Notatka

Aby wyświetlić zmienne środowiskowe, w Panelu sterowaniaotwórz System, a następnie wybierz kartę Zaawansowane.

zmienne skryptów sqlcmd

Zmienna Opcja powiązana R/W Domyślny
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER -S R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R NazwaKomputera
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -l R/W "8" (sekundy)
SQLCMDSTATTIMEOUT -t R/W "0" = oczekiwanie na czas nieokreślony
SQLCMDHEADERS -h R/W "0"
SQLCMDCOLSEP -s R/W " "
SQLCMDCOLWIDTH -w O/Z "0"
SQLCMDPACKETSIZE -a R "4096"
SQLCMDERRORLEVEL -m R/W 0
SQLCMDMAXVARTYPEWIDTH -y R/W "256"
SQLCMDMAXFIXEDTYPEWIDTH -Y R/W "0" = nieograniczona
SQLCMDEDITOR R/W edit.com
SQLCMDINI R ""
SQLCMDUSEAAD -G R/W ""

SQLCMDUSER, SQLCMDPASSWORDi SQLCMDSERVER są ustawiane podczas :Connect.

R wskazuje, że wartość można ustawić tylko raz podczas inicjowania programu.

R/W wskazuje, że wartość można zmodyfikować przy użyciu polecenia :setvar, a kolejne polecenia mają wpływ na nową wartość.

polecenia sqlcmd

Oprócz instrukcji Transact-SQL w sqlcmddostępne są również następujące polecenia:

GO [ liczba ]

:List

[:]RESET

:Error

[:]ED

:Out

[:]!!

:Perftrace

[:]QUIT

:Connect

[:]EXIT

:On Error

:r

:Help

:ServerList

:XML [ ON | OFF ]

:Setvar

:Listvar

Podczas korzystania z poleceń sqlcmd należy pamiętać o następujących kwestiach:

  • Wszystkie polecenia sqlcmd, z wyjątkiem GO, muszą być poprzedzone dwukropkiem (:).

    Ważny

    Aby zachować zgodność wsteczną z istniejącymi skryptami osql, niektóre polecenia są rozpoznawane bez dwukropka, co wskazuje :.

  • polecenia sqlcmd są rozpoznawane tylko wtedy, gdy pojawiają się na początku wiersza.

  • Wszystkie polecenia sqlcmd są niewrażliwe na wielkość liter.

  • Każde polecenie musi znajdować się w osobnym wierszu. Polecenie nie może być poprzedzone instrukcją Transact-SQL ani innym poleceniem.

  • Polecenia są wykonywane natychmiast. Nie są one umieszczane w buforze wykonywania tak, jak instrukcje Transact-SQL.

Edytowanie poleceń

[:]ED

Uruchamia edytor tekstów. Za pomocą tego edytora można edytować bieżącą Transact-SQL partię lub ostatnią wykonaną partię. Aby edytować ostatnią wykonaną partię, polecenie ED musi być wpisywane natychmiast po zakończeniu wykonywania ostatniej partii.

Edytor tekstu jest definiowany przez zmienną środowiskową SQLCMDEDITOR. Domyślny edytor to Edit. Aby zmienić edytor, ustaw zmienną środowiskową SQLCMDEDITOR. Aby na przykład ustawić edytor na Microsoft Notatnik, w wierszu polecenia wpisz:

SET SQLCMDEDITOR=notepad

[:]RESETOWAĆ

Czyści pamięć podręczną deklaracji.

:Lista

Drukuje zawartość pamięci podręcznej zapytań.

Zmienne

:Setvar <var> [ "wartość" ]

Definiuje zmienne skryptowe sqlcmd. Zmienne skryptowe mają następujący format: $(VARNAME).

Nazwy zmiennych są niewrażliwe na wielkość liter.

Zmienne skryptowe można ustawić na następujące sposoby:

  • Niejawne użycie opcji wiersza polecenia. Na przykład opcja -l ustawia zmiennąSQLCMDLOGINTIMEOUT sqlcmd.

  • Jawnie przy użyciu polecenia :Setvar.

  • Definiując zmienną środowiskową przed uruchomieniem sqlcmd.

Notatka

Opcja -X uniemożliwia przekazywanie zmiennych środowiskowych do sqlcmd.

Jeśli zmienna zdefiniowana przy użyciu :Setvar i zmiennej środowiskowej mają taką samą nazwę, zmienna zdefiniowana przy użyciu :Setvar ma pierwszeństwo.

Nazwy zmiennych nie mogą zawierać pustych znaków spacji.

Nazwy zmiennych nie mogą mieć tej samej formy co wyrażenia zmiennej, takie jak $(var).

Jeśli wartość ciągu zmiennej skryptowej zawiera puste spacje, należy ująć wartość w cudzysłów. Jeśli nie określono wartości zmiennej skryptowej, zmienna skryptowa zostanie porzucona.

:Listvar

Wyświetla listę aktualnie ustawionych zmiennych skryptowych.

Notatka

Wyświetlane są tylko zmienne skryptowe ustawiane przez sqlcmdi te, które są ustawione przy użyciu polecenia :Setvar.

Polecenia wyjściowe

:Błąd <nazwa pliku> | STDERR | STDOUT

Przekieruj wszystkie dane wyjściowe błędu do pliku określonego przez nazwę pliku , na stderr lub do stdout. Polecenie :Error może pojawić się wiele razy w skrypcie. Domyślnie komunikaty o błędach są wysyłane do stderr.

  • nazwy pliku

    Tworzy i otwiera plik, który odbiera dane wyjściowe. Jeśli plik już istnieje, zostanie obcięty do zera bajtów. Jeśli plik nie jest dostępny z powodu uprawnień lub innych powodów, dane wyjściowe nie są przełączane i są wysyłane do ostatniego określonego lub domyślnego miejsca docelowego.

  • STDERR

    Przełącza dane wyjściowe błędu do strumienia stderr. Jeśli zostało to przekierowane, element docelowy, do którego przekierowano strumień, otrzymuje dane wyjściowe błędu.

  • STDOUT

    Przełącza strumień błędów do strumienia stdout. Jeśli nastąpiło przekierowanie, miejsce docelowe, do którego przekierowano strumień, otrzymuje komunikaty błędów.

:Out <nazwa pliku> | STDERR | STDOUT

Tworzy i przekierowuje wszystkie wyniki zapytania do pliku określonego przez nazwę pliku , do stderr lub do stdout. Domyślnie dane wyjściowe są wysyłane do stdout. Jeśli plik już istnieje, zostanie obcięty do zera bajtów. Polecenie :Out może pojawiać się wielokrotnie w skrypcie.

:Perftrace <nazwa pliku> | STDERR | STDOUT

Tworzy i przekierowuje wszystkie informacje śledzenia wydajności do pliku o nazwie , do stderr lub do stdout. Domyślnie wyniki śledzenia wydajności są wysyłane do stdout. Jeśli plik już istnieje, zostanie obcięty do zera bajtów. Polecenie :Perftrace może wystąpić wiele razy w skrypcie.

Polecenia kontroli wykonywania

:Przy błędzie [ zakończ | zignoruj ]

Ustawia akcję do wykonania, gdy wystąpi błąd podczas wykonywania skryptu lub partii.

Gdy jest używana opcja exit, sqlcmd kończy działanie z odpowiednią wartością błędu.

Gdy jest używana opcja ignore, sqlcmd ignoruje błąd i kontynuuje wykonywanie partii lub skryptu. Domyślnie jest wyświetlany komunikat o błędzie.

[:]KOŃCZYĆ

Powoduje zakończenie działania sqlcmd .

[:]EXIT [ ( , instrukcja ) ]

Umożliwia użycie wyniku instrukcji SELECT jako wartości zwracanej z sqlcmd. Jeśli wartość liczbowa, pierwsza kolumna ostatniego wiersza wyników jest konwertowana na liczbę całkowitą 4-bajtową (długą). Systemy MS-DOS, Linux i macOS przekazują niższy bajt do poziomu błędu procesu nadrzędnego lub systemu operacyjnego. System Windows 2000 i nowsze wersje przekazują całą 4-bajtową liczbę całkowitą. Składnia jest :EXIT(query).

Na przykład:

:EXIT(SELECT @@ROWCOUNT)

Można również dołączyć parametr :EXIT w ramach pliku wsadowego. Na przykład w wierszu polecenia wpisz:

sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"

Narzędzie sqlcmd wysyła wszystko między nawiasami (()) do serwera. Jeśli systemowa procedura składowana wybiera zestaw i zwraca wartość, zwracany jest tylko wybór. Instrukcja :EXIT() bez niczego między nawiasami wykonuje wszystko, co jest przed nią w serii, a następnie kończy działanie bez zwracania wartości.

Po określeniu nieprawidłowego zapytania sqlcmd kończy działanie bez zwracanej wartości.

Oto lista formatów EXIT:

  • :EXIT

    Nie wykonuje skryptu wsadowego, i od razu kończy działanie, nie zwracając żadnej wartości.

  • :EXIT( )

    Wykonuje partię, a następnie kończy działanie i nie zwraca żadnej wartości.

  • :EXIT(query)

    Wykonuje partię zawierającą zapytanie, a następnie kończy działanie po powrocie wyników zapytania.

Jeśli RAISERROR jest używana w skrypcie sqlcmd i zgłoszony zostanie stan 127, sqlcmd kończy działanie i zwraca identyfikator komunikatu z powrotem do klienta. Na przykład:

RAISERROR(50001, 10, 127)

Ten błąd powoduje zakończenie skryptu sqlcmd i zwrócenie komunikatu o identyfikatorze 50001 do klienta.

Zwracane wartości -1 do -99 są zarezerwowane przez program SQL Server, a sqlcmd definiuje następujące dodatkowe wartości zwracane:

Wartość zwracana Opis
-100 Wystąpił błąd przed wybraniem wartości zwracanej.
-101 Podczas wybierania wartości zwracanej nie znaleziono wierszy.
-102 Wystąpił błąd konwersji podczas wybierania wartości zwracanej.

GO [ liczba]

GO sygnalizuje zarówno koniec partii, jak i wykonywanie wszelkich buforowanych instrukcji Transact-SQL. Seria jest wykonywana wiele razy jako oddzielne partie. Nie można zadeklarować zmiennej więcej niż raz w jednej partii.

Różne polecenia

:r <nazwa pliku>

Analizuje dodatkowe instrukcje Transact-SQL i polecenia sqlcmd z pliku określonego przez nazwę pliku do pamięci podręcznej instrukcji. nazwa pliku jest odczytywana względem katalogu startowego, w którym uruchomiono sqlcmd.

Jeśli plik zawiera instrukcje Transact-SQL, które nie są poprzedzone przez GO, należy wprowadzić GO w wierszu, który następuje po :r.

Plik zostanie odczytany i wykonany po napotkaniu terminatora wsadowego. Można wydać wiele poleceń :r. Plik może zawierać dowolne polecenie sqlcmd, w tym końcowy znak wsadowy GO.

Uwaga

Liczba wierszy wyświetlana w trybie interaktywnym zostanie zwiększona o jedną dla każdego napotkanego polecenia :r. Polecenie :r zostanie wyświetlone w danych wyjściowych polecenia listy.

:ListaSerwerów

Wyświetla listę lokalnie skonfigurowanych serwerów i nazw serwerów nadających w sieci.

:Connect server_name[\instance_name] [-l limit czasu] [-U user_name [-P hasło]]

Nawiązuje połączenie z wystąpieniem SQL Server. Zamyka również bieżące połączenie.

Opcje limitu czasu:

Wartość Zachowanie
0 Czekaj na zawsze
n>0 Poczekaj n sekund

Zmienna skryptowa SQLCMDSERVER odzwierciedla bieżące aktywne połączenie.

Jeśli limit czasu nie zostanie określony, wartość zmiennej SQLCMDLOGINTIMEOUT jest wartością domyślną.

Jeśli zostanie określona tylko user_name (jako opcja lub jako zmienna środowiskowa), użytkownik zostanie poproszony o wprowadzenie hasła. Użytkownicy nie są monitowani, jeśli ustawiono zmienne środowiskowe SQLCMDUSER lub SQLCMDPASSWORD. Jeśli nie udostępniasz opcji ani zmiennych środowiskowych, tryb uwierzytelniania systemu Windows jest używany do logowania. Aby na przykład ustanowić połączenie z wystąpieniem instance1serwera SQL Server myserver, przy użyciu zintegrowanego bezpieczeństwa, należy użyć następującego polecenia:

:connect myserver\instance1

Aby nawiązać połączenie z domyślnym wystąpieniem myserver przy użyciu zmiennych skryptowych, należy użyć następujących ustawień:

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! polecenie

Wykonuje polecenia systemu operacyjnego. Aby wykonać polecenie systemu operacyjnego, uruchom wiersz z dwoma wykrzyknikami (!!), a następnie polecenie systemu operacyjnego. Na przykład:

:!! dir

Notatka

Polecenie jest wykonywane na komputerze, na którym jest uruchomiony sqlcmd.

:XML [ ON | WYŁĄCZONE ]

Aby uzyskać więcej informacji, zobacz format danych wyjściowych XML i format danych wyjściowych JSON w tym artykule.

:Pomoc

Wyświetla polecenia sqlcmd wraz z krótkim opisem każdego polecenia.

nazwy plików sqlcmd

pliki wejściowe sqlcmd można określić za pomocą opcji -i lub polecenia :r. Pliki wyjściowe można określić za pomocą opcji -o lub poleceń :Error, :Out i :Perftrace. Poniżej przedstawiono pewne wskazówki dotyczące pracy z tymi plikami:

  • :Error, :Out i :Perftrace powinny używać oddzielnych wartości nazwy pliku. W przypadku użycia tej samej nazwy pliku, dane wejściowe z poleceń mogą się wymieszać.

  • Jeśli plik wejściowy znajdujący się na serwerze zdalnym jest wywoływany z sqlcmd na komputerze lokalnym, a plik zawiera ścieżkę pliku dysku, taką jak :Out c:\OutputFile.txt, plik wyjściowy jest tworzony na komputerze lokalnym, a nie na serwerze zdalnym.

  • Prawidłowe ścieżki plików obejmują: C:\<filename>, \\<Server>\<Share$>\<filename>i "C:\Some Folder\<file name>". Jeśli w ścieżce znajduje się spacja, użyj cudzysłowów.

  • Każda nowa sqlcmd sesji zastępuje istniejące pliki o tych samych nazwach.

Komunikaty informacyjne

sqlcmd wyświetla wszelkie komunikaty informacyjne wysyłane przez serwer. W poniższym przykładzie po wykonaniu instrukcji Transact-SQL zostanie wydrukowany komunikat informacyjny.

Uruchom sqlcmd. W wierszu polecenia sqlcmd wpisz zapytanie:

USE AdventureWorks2022;
GO

Po naciśnięciu ENTERzostanie wyświetlony następujący komunikat informacyjny:

Changed database context to 'AdventureWorks2022'.

Format danych wyjściowych z zapytań Transact-SQL

sqlcmd najpierw wyświetla nagłówek kolumny, który zawiera nazwy kolumn określone na liście wyboru. Nazwy kolumn są oddzielone znakiem SQLCMDCOLSEP. Domyślnie jest to spacja. Jeśli nazwa kolumny jest krótsza niż szerokość kolumny, dane wyjściowe są dopełniane spacjami do następnej kolumny.

Po tym wierszu następuje wiersz separatora, który jest serią znaków kreski. Następujący wynik pokazuje przykład.

Uruchom sqlcmd. W wierszu polecenia sqlcmd wpisz zapytanie:

USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Po naciśnięciu ENTERzostanie zwrócony następujący zestaw wyników.

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

Mimo że kolumna BusinessEntityID ma tylko cztery znaki szerokości, została rozszerzona tak, aby pomieścić dłuższą nazwę kolumny. Domyślnie dane wyjściowe są zakończone na 80 znakach. Tę szerokość można zmienić przy użyciu opcji -w lub ustawiając zmienną skryptową SQLCMDCOLWIDTH.

Format danych wyjściowych XML

Dane wyjściowe XML będące wynikiem klauzuli FOR XML to dane wyjściowe, niesformatowane, w strumieniu ciągłym.

Jeśli oczekujesz danych wyjściowych XML, użyj następującego polecenia: :XML ON.

Notatka

sqlcmd zwraca komunikaty o błędach w zwykłym formacie. Komunikaty o błędach są również eksportowane w strumieniu tekstowym XML w formacie XML. Przy użyciu :XML ONprogram sqlcmd nie wyświetla komunikatów informacyjnych.

Aby ustawić tryb XML na wyłączony, użyj następującego polecenia: :XML OFF.

Polecenie GO nie powinno być wyświetlane przed wydaniem polecenia :XML OFF, ponieważ polecenie :XML OFF przełącza sqlcmd z powrotem do danych wyjściowych zorientowanych na wiersz.

Nie można mieszać danych xml (przesyłanych strumieniowo) i danych zestawu wierszy. Jeśli polecenie :XML ON nie zostało wydane przed wykonaniem instrukcji Transact-SQL, która wyprowadza strumienie XML, dane wyjściowe są zniekształcone. Po wydaniu polecenia :XML ON nie można wykonać instrukcji Transact-SQL wyświetlających zwykłe zestawy wierszy.

Notatka

Polecenie :XML nie obsługuje instrukcji SET STATISTICS XML.

Format danych wyjściowych JSON

Jeśli oczekujesz danych wyjściowych JSON, użyj następującego polecenia: :XML ON. W przeciwnym razie dane wyjściowe zawierają zarówno nazwę kolumny, jak i tekst JSON. Te dane wyjściowe nie są prawidłowe w formacie JSON.

Aby ustawić tryb XML na wyłączony, użyj następującego polecenia: :XML OFF.

Aby uzyskać więcej informacji, zobacz format danych wyjściowych XML w tym artykule.

Korzystanie z uwierzytelniania entra firmy Microsoft

Przykłady użycia uwierzytelniania entra firmy Microsoft:

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

najlepsze rozwiązania dotyczące narzędzia sqlcmd

Skorzystaj z poniższych rozwiązań, aby zmaksymalizować bezpieczeństwo i wydajność.

  • Użyj zintegrowanych zabezpieczeń.

  • Użyj -X[1] w środowiskach zautomatyzowanych.

  • Zabezpieczanie plików wejściowych i wyjściowych przy użyciu odpowiednich uprawnień systemu plików.

  • Aby zwiększyć wydajność, wykonaj tyle, ile to możliwe, w jednej sesji sqlcmd, zamiast w serii sesji.

  • Ustaw wartości limitu czasu dla wykonywania wsadu lub zapytania na wyższe, niż przewidujesz, że potrwa wykonanie wsadu lub zapytania.

Skorzystaj z poniższych rozwiązań, aby zmaksymalizować poprawność:

  • Użyj -V 16, aby rejestrować komunikaty o poziomie ważności 16, oznaczone jako . Komunikaty o ważności 16 wskazują ogólne błędy, które mogą zostać skorygowane przez użytkownika.

  • Sprawdź kod zakończenia i zmienną DOS ERRORLEVEL po zakończeniu procesu. sqlcmd zwraca zwykle 0, w przeciwnym razie ustawia ERRORLEVEL zgodnie z konfiguracją -V. Innymi słowy, ERRORLEVEL nie należy oczekiwać, że będą miały tę samą wartość co numer błędu zgłaszany przez SQL Server. Numer błędu to wartość specyficzna dla programu SQL Server odpowiadająca funkcji systemowej @@ERROR. ERRORLEVEL jest wartością sqlcmd specyficzną dla, aby wskazać, dlaczego sqlcmd zakończyło się, a jej wartość zależy od określenia argumentu wiersza poleceń -b.

Używanie -V 16 w połączeniu z sprawdzaniem kodu zakończenia i DOS ERRORLEVEL może pomóc w przechwyceniu błędów w zautomatyzowanych środowiskach, szczególnie bram jakości przed wydaniem produkcyjnym.