Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database w Microsoft Fabric
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ć przy użyciu polecenia setvar lub niejawnie przy użyciu opcji sqlcmd -v
.
Ten artykuł zawiera również przykłady definiowania zmiennych środowiskowych w wierszu polecenia Cmd.exe przy użyciu SET
.
Polecenie setvar służy do definiowania zmiennych skryptowych. Zmienne zdefiniowane za pomocą polecenia setvar 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 setvar, zostanie zwrócony komunikat o błędzie i wykonanie skryptu zostanie zatrzymane. Aby uzyskać więcej informacji, zobacz opcję -b
w sqlcmd.
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
Uwaga
Aby wyświetlić zmienne środowiskowe, w Panelu sterowaniaotwórz System, a następnie wybierz kartę Zaawansowane.
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
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
Uwaga
Jeśli żadna wartość nie zostanie przypisana do zmiennej środowiskowej sqlcmd, zmienna zostanie usunięta. Użycie
:setvar VarName
bez 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 zdefiniowane przy użyciu setvar lub 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"
.
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 zdefiniowane przez sqlcmd są nazywane zmiennymi skryptowymi. W poniższej tabeli wymieniono zmienne skryptów sqlcmd.
Zmienna | Opcja powiązana | R/W | Domyślny |
---|---|---|---|
SQLCMDUSER 1 | -U | R 2 | "" |
SQLCMDPASSWORD 1 | -P | -- | "" |
SQLCMDSERVER 1 | -S | R 2 | "DefaultLocalInstance" |
SQLCMDWORKSTATION | -H | R 2 | NazwaKomputera |
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.
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 server
jest 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
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>
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
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)
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)
Uwaga
Opcja -X
wyłącza funkcję skryptu uruchamiania.
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
- Używanie narzędzia sqlcmd
- narzędzie sqlcmd
- Dokumentacja narzędzia wiersza poleceń (aparat bazy danych)