Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
System Platform Analitycznych (PDW)
Baza danych SQL w Microsoft Fabric
Narzędzie sqlcmd umożliwia wprowadzanie instrukcji Transact-SQL, procedur systemowych i plików skryptów.
Note
Aby dowiedzieć się, który wariant i wersja narzędzia sqlcmd jest zainstalowany w systemie, zobacz Sprawdzanie zainstalowanej wersji narzędzia sqlcmd. Aby uzyskać informacje na temat pobierania narzędzia sqlcmd, zobacz Pobieranie i instalowanie narzędzia sqlcmd.
Zmienne skryptowe w narzędziu sqlcmd
Zmienne używane w skryptach są nazywane zmiennymi skryptowymi. Zmienne skryptowe umożliwiają korzystanie z jednego skryptu w wielu scenariuszach. Jeśli na przykład chcesz uruchomić jeden skrypt na wielu serwerach, zamiast modyfikować skrypt dla każdego serwera, możesz użyć zmiennej skryptowej dla nazwy serwera. Zmieniając nazwę serwera dostarczoną do zmiennej skryptowej, ten sam skrypt można wykonać na różnych serwerach.
Zmienne skryptowe można jawnie zdefiniować za pomocą setvar polecenia lub niejawnie za pomocą sqlcmd -v opcji .
Ten artykuł zawiera również przykłady definiujące zmienne środowiskowe w wierszu polecenia przy użyciu polecenia SET.
Ustawianie zmiennych skryptowych za pomocą polecenia setvar
Polecenie setvar definiuje zmienne skryptowe. Zmienne zdefiniowane za pomocą setvar polecenia są przechowywane wewnętrznie. Zmienne skryptowe nie powinny być mylone ze zmiennymi środowiskowymi zdefiniowanymi w wierszu polecenia przy użyciu SET. Jeśli skrypt odwołuje się do zmiennej, która nie jest zmienną środowiskową lub nie jest zdefiniowana przy użyciu metody setvar, zostanie zwrócony komunikat o błędzie i wykonanie skryptu zostanie zatrzymane. Aby uzyskać więcej informacji, zobacz opcję -b w sqlcmd.
Precedencja zmiennych (od najniższego do najwyższego)
Jeśli więcej niż jeden typ zmiennej ma taką samą nazwę, zostanie użyta zmienna o najwyższym pierwszeństwie.
- Zmienne środowiskowe na poziomie systemu
- Zmienne środowiskowe na poziomie użytkownika
- Powłoka poleceń (
SET X=Y) skonfigurowana w wierszu poleceń przed uruchomieniem sqlcmd sqlcmd -v X=Y:Setvar X Y
Note
Aby wyświetlić zmienne środowiskowe w systemie Windows 11, otwórz pozycję Ustawienia, a następnie przejdź do pozycji Informacje o systemie> i wybierz link Zaawansowane ustawienia systemowe. W oknie Właściwości systemu wybierz pozycję Zmienne środowiskowe. W systemie Linux wpisz printenv w wierszu poleceń, a w systemie macOS wpisz env.
Niejawnie ustawiaj zmienne skryptowe
Po uruchomieniu sqlcmd z opcją, która ma powiązaną zmienną sqlcmd, zmienna sqlcmd jest ustawiana niejawnie na wartość określoną przy użyciu opcji. W poniższym przykładzie sqlcmd jest uruchamiane z opcją -l. To niejawnie ustawia zmienną SQLLOGINTIMEOUT.
sqlcmd -l 60
Możesz również użyć opcji -v, aby ustawić zmienną skryptową, która istnieje w skrycie. W poniższym skryfcie (nazwa pliku to testscript.sql), ColumnName jest zmienną skryptową.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Następnie możesz określić nazwę kolumny, która ma zostać zwrócona przy użyciu opcji -v:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Aby zwrócić inną kolumnę przy użyciu tego samego skryptu, zmień wartość zmiennej skryptowej ColumnName.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Wskazówki dotyczące tworzenia skryptów dla nazw i wartości zmiennych
Podczas nadawania nazw zmiennych skryptowych należy wziąć pod uwagę następujące wskazówki:
Nazwy zmiennych nie mogą zawierać znaków odstępu ani cudzysłowu.
Nazwy zmiennych nie mogą mieć takiej samej formy jak wyrażenie zmiennej, takie jak $(var).
Zmienne skryptowe są niewrażliwe na wielkość liter
Note
Jeśli żadna wartość nie zostanie przypisana do zmiennej środowiskowej sqlcmd, zmienna zostanie usunięta. Użycie
:setvar VarNamebez wartości czyści zmienną.
Podczas określania wartości zmiennych skryptowych należy wziąć pod uwagę następujące wskazówki:
- Wartości zmiennych, które są zdefiniowane przy użyciu
setvaralbo opcji-v, muszą być ujęte w cudzysłów, jeśli wartość ciągu zawiera spacje. - Jeśli znaki cudzysłowu są częścią wartości zmiennej, muszą zostać uniknięte. Na przykład: :
setvar MyVar "spac""e".
Wskazówki dotyczące ustalania wartości zmiennych i nazw w cmd.exe
Zmienne zdefiniowane przy użyciu SET są częścią środowiska cmd.exe i mogą być przywołyne przez sqlcmd. Weź pod uwagę następujące wskazówki:
- Nazwy zmiennych nie mogą zawierać znaków odstępu ani cudzysłowu.
- Wartości zmiennych mogą zawierać spacje lub znaki cudzysłowu.
zmienne skryptów sqlcmd
| Variable | Opcja powiązana | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (sekundy) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = oczekiwanie na czas nieokreślony |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = nieograniczona |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD oraz SQLCMDSERVER są ustawiane, gdy używa się :Connect.
2 R wskazuje, że wartość można ustawić tylko raz podczas inicjowania programu.
3 R/W wskazuje, że wartość można zresetować przy użyciu setvar polecenia , a kolejne polecenia używają nowej wartości.
Examples
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
A. Używanie polecenia setvar w skrycie
Wiele opcji sqlcmd można kontrolować w skrypcie przy użyciu polecenia setvar. W poniższym przykładzie skrypt test.sql jest tworzony, w którym zmienna SQLCMDLOGINTIMEOUT jest ustawiona na 60 sekund, a inna zmienna skryptowa serverjest ustawiona na testserver. Poniższy kod znajduje się w test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Skrypt jest następnie wywoływany przy użyciu polecenia sqlcmd:
sqlcmd -i c:\test.sql
B. Interakcyjne używanie polecenia setvar
W poniższym przykładzie pokazano, jak interaktywnie ustawić zmienną skryptową przy użyciu polecenia setvar.
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Oto zestaw wyników.
Changed database context to 'AdventureWorks2022'
1>
C. Używanie zmiennych środowiskowych wiersza polecenia w narzędziu sqlcmd
W poniższym przykładzie cztery zmienne środowiskowe are są ustawione, a następnie wywoływane są z sqlcmd.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Używanie zmiennych środowiskowych na poziomie użytkownika w narzędziu sqlcmd
W poniższym przykładzie zmienna środowiskowa na poziomie użytkownika %Temp% jest ustawiana w wierszu polecenia i przekazywana do pliku wejściowego sqlcmd. Aby uzyskać zmienną środowiskową na poziomie użytkownika, w Panelu sterowaniakliknij dwukrotnie System. Wybierz kartę Zaawansowane, a następnie wybierz Zmienne Środowiskowe.
Poniższy kod znajduje się w pliku wejściowym C:\testscript.txt:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Ten następujący kod jest wprowadzany w wierszu polecenia:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Następujący wynik jest wysyłany do pliku wyjściowego C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Korzystanie ze skryptu uruchamiania
Skrypt uruchamiania sqlcmd jest wykonywany po uruchomieniu sqlcmd. Poniższy przykład ustawia zmienną środowiskową SQLCMDINI. Jest to zawartość init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Spowoduje to wywołanie pliku init.sql po uruchomieniu sqlcmd.
SET sqlcmdini=c:\init.sql
sqlcmd
Są to dane wyjściowe.
1> <user> is connected to <server> (9.00.2047.00)
Note
Opcja -X wyłącza funkcję skryptu uruchamiania.
F. Rozszerzanie zmiennych
Poniższy przykład przedstawia pracę z danymi w postaci zmiennej sqlcmd.
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Wstaw jeden wiersz do Col1 z dbo.VariableTest, który zawiera wartość $(tablename).
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
Po wyświetleniu monitu sqlcmd, gdy żadna zmienna nie jest ustawiona na wartość $(tablename), następujące instrukcje zwracają wiersz, a także zwracają komunikat "'tablename' scripting variable not defined". Domyślnie flaga sqlcmd-b nie jest ustawiona. Jeśli -b jest ustawiona, sqlcmd zakończy się po błędzie "zmienna niezdefiniowana".
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Oto zestaw wyników.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Biorąc pod uwagę, że zmienna MyVar jest ustawiona na $(tablename).
6> :setvar MyVar $(tablename)
Te polecenia zwracają wiersz, a także zwracają komunikat "'tablename' zmienna skryptowa nie jest zdefiniowana".
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Te oświadczenia zwracają wiersz.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Treści powiązane
- Dowiedz się więcej o narzędziu sqlcmd (Go) w usłudze GitHub
- Szybki start: uruchamianie obrazów kontenerów SQL Server w systemie Linux z użyciem Dockera
- Uruchamianie narzędzia sqlcmd
- Wykonywanie języka T-SQL z pliku skryptu za pomocą polecenia sqlcmd
- korzystanie z narzędzia
- Używanie narzędzia sqlcmd ze zmiennymi skryptowymi
- Nawiązywanie połączenia z programem SQL Server za pomocą narzędzia sqlcmd
- edytowanie skryptów SQLCMD za pomocą edytora zapytań
- Zarządzanie etapami zadań
- Utwórz krok zadania CmdExec