Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SQLCMD

Termin Definicja
SQLCMD

SQLCMD to narzędzie wiersza poleceń umożliwiające wykonywanie zapytań T-SQL bez interfejsu graficznego.

SQLCMD jako narzędzie klienta SQL Server

SQLCMD jest programem uruchamianym w wierszu poleceń, służącym do łączenia się z instancją Microsoft SQL Server i wykonywania poleceń T-SQL bez użycia graficznego środowiska administracyjnego. Po zestawieniu połączenia narzędzie wysyła do serwera zapytania, procedury składowane albo całe partie instrukcji, a następnie wyświetla otrzymane wyniki w terminalu lub zapisuje je do pliku. SQLCMD działa jako klient, dlatego samo zainstalowanie programu nie tworzy bazy danych ani instancji serwera.

Podczas połączenia można wskazać nazwę serwera i instancji za pomocą opcji -S, bazę danych przez -d, a także sposób uwierzytelniania. Opcja -E oznacza użycie zintegrowanego uwierzytelniania systemu Windows. Przy uwierzytelnianiu obsługiwanym przez SQL Server stosuje się parametry -U i -P, jednak wpisywanie hasła bezpośrednio w poleceniu może ujawnić je w historii powłoki lub na liście procesów. Z tego powodu w praktyce należy stosować bezpieczniejszy sposób przekazywania poświadczeń oraz ograniczać uprawnienia konta używanego przez skrypt.

Wykonywanie zapytań i skryptów T-SQL

Jednorazowe zapytanie można przekazać przez przełącznik -Q. Przykładowe polecenie sqlcmd -S localhost\SQLEXPRESS -E -d Sklep -Q "SELECT TOP (10) * FROM dbo.Produkty;" łączy się z lokalną instancją SQL Server Express, korzysta z konta Windows, wybiera bazę Sklep i wykonuje zapytanie. Warto pamiętać, że składnia TOP (10), kwalifikator dbo oraz pozostałe elementy przykładu należą do języka T-SQL używanego przez SQL Server, a nie do ogólnej składni każdego systemu bazodanowego.

Większe zadania zapisuje się w pliku tekstowym i przekazuje do SQLCMD przez opcję -i. Wynik działania można skierować do pliku za pomocą -o. Przełącznik -b powoduje ustawienie niezerowego kodu zakończenia procesu, gdy podczas wykonywania skryptu wystąpi błąd. Jest to istotne w zadaniach automatycznych, ponieważ sam komunikat wyświetlony w konsoli nie zawsze zatrzymuje zewnętrzny skrypt. Parametr -V pozwala określić poziom ważności komunikatów, które mają zostać potraktowane jako błąd procesu.

SQLCMD rozpoznaje również polecenia sterujące klienta, zapisywane z dwukropkiem, na przykład :r plik.sql dołącza zawartość innego pliku, a :setvar Nazwa Wartość definiuje zmienną używaną w skrypcie jako $(Nazwa). Polecenie GO nie jest instrukcją T-SQL wykonywaną przez silnik. Jest separatorem partii interpretowanym przez narzędzie klienta; SQLCMD przekazuje kolejne partie do serwera dopiero po napotkaniu tego separatora. Ma to znaczenie między innymi przy tworzeniu procedur, ponieważ definicja procedury musi zostać wysłana jako odpowiednia partia.

Parametry połączenia, wyjście i obsługa błędów

SQLCMD może pracować interaktywnie albo w trybie skryptowym. W trybie interaktywnym użytkownik wpisuje kolejne polecenia i obserwuje odpowiedzi serwera. W trybie skryptowym zestaw instrukcji znajduje się w pliku, co ułatwia powtarzalne wykonywanie migracji, kontroli stanu bazy lub zadań administracyjnych. Narzędzie wyświetla komunikaty serwera, wyniki zapytań oraz informacje diagnostyczne, a format wyjścia można dostosować przełącznikami dotyczącymi separatorów kolumn, szerokości wiersza i sposobu drukowania nagłówków.

Przy diagnozowaniu problemów z połączeniem należy rozdzielić błąd klienta od błędu serwera. Nieprawidłowa wartość -S może wskazywać niewłaściwą nazwę hosta lub instancji, natomiast poprawne odnalezienie serwera nie gwarantuje jeszcze udanego uwierzytelnienia. Połączenie może zostać odrzucone także wtedy, gdy konto nie ma dostępu do wskazanej bazy przez -d, protokół sieciowy jest wyłączony albo zapora blokuje port używany przez SQL Server. Samo SQLCMD nie naprawia tych problemów; dostarcza jedynie komunikatu pozwalającego ustalić, na którym etapie operacja się nie powiodła.

W skryptach produkcyjnych należy kontrolować kod zakończenia procesu, logować wejściowe parametry bez ujawniania haseł i stosować jednoznaczne nazwy plików wejściowych oraz wynikowych. Przy operacjach zmieniających dane trzeba również uwzględnić transakcje T-SQL, kolejność wykonywania partii i możliwość częściowego wykonania skryptu. SQLCMD może uruchomić instrukcje takie jak INSERT, UPDATE, DELETE czy ALTER TABLE, ale zakres skutków zależy od uprawnień konta oraz od treści wysłanego skryptu. Przed wykonaniem zmian należy sprawdzić docelową instancję i bazę, ponieważ pomyłka w parametrze -S lub -d może skierować operację do innego środowiska.

Rola SQLCMD w pracy z instalacją SQL Server

SQLCMD jest szczególnie użyteczny wtedy, gdy potrzebna jest powtarzalna praca z Microsoft SQL Server z poziomu skryptu systemowego, harmonogramu zadań albo procesu wdrożeniowego. Może służyć do sprawdzenia wersji silnika zapytaniem SELECT SERVERPROPERTY('ProductVersion');, odczytania stanu baz, wykonania kontrolnego zapytania lub uruchomienia przygotowanego skryptu. Wynik takiej kontroli trzeba interpretować w kontekście konkretnej instancji, konta i bazy danych, ponieważ identyczne zapytanie może zwrócić inny rezultat po połączeniu z innym serwerem.

W diagnostyce stanowiska administrator sprawdza między innymi, czy zainstalowano właściwe wydanie narzędzia, czy system może rozwiązać nazwę serwera, czy działa wymagany protokół oraz czy konto ma odpowiednie uprawnienia. Błędy składni T-SQL, błędy uprawnień i błędy transportu sieciowego mają różne przyczyny, dlatego nie powinny być traktowane jako jeden problem programu SQLCMD. Narzędzie jest tylko warstwą wykonującą polecenia i prezentującą odpowiedź; integralność danych, konfiguracja silnika oraz poprawność skryptu pozostają odpowiedzialnością środowiska SQL Server i administratora.

Przy awarii komputera używanego do zarządzania bazą można dodatkowo sprawdzić, czy system poprawnie uruchamia powłokę, czy ścieżka do programu znajduje się w zmiennej środowiskowej PATH oraz czy pliki skryptów i wyników nie są uszkodzone.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę