Using sqlcmd with Scripting Variables
Zmienne, które są używane w skryptach są określane jako zmienne wykonywanie wykonywanie skryptów.Zmienne wykonywanie wykonywanie skryptów włączenie jednego skryptu ma być używany w wielu scenariuszach.Na przykład jeśli chcesz uruchomić jednego skryptu dla wielu serwerów, zamiast modyfikować skrypt dla każdego serwera, można użyć zmiennej wykonywanie wykonywanie skryptów nazwa serwera.Zmieniając nazwa serwera do zmiennej wykonywanie wykonywanie skryptów, ten sam skrypt może być wykonywany na różnych serwerach.
Scripting variables can be defined explicitly by using the setvar command, or implicitly by using the sqlcmd-v option.
Ten temat zawiera również przykłady definiowania zmiennych środowiskowych w wiersz polecenia programu Cmd.exe przy użyciu ZESTAW.
Ustawienie wykonywanie wykonywanie skryptów zmienne przy użyciu polecenia setvar
The setvar command is used to define wykonywanie skryptów variables.Zmienne, które są zdefiniowane za pomocą setvar polecenia są przechowywane wewnętrznie.wykonywanie wykonywanie skryptów zmiennych, nie należy mylić z zmiennych środowiskowych, które są zdefiniowane w wiersz polecenia przy użyciu ZESTAW.Jeśli skrypt odwołuje się do zmiennej, która nie jest zmienną środowiskową lub nie jest zdefiniowane przy użyciu setvar, zwracany jest komunikat o błędzie i zatrzyma wykonanie skryptu.Aby uzyskać więcej informacji, zobacz temat -b opcjisqlcmd Utility.
Pierwszeństwo zmiennej (niski wysoki)
Jeśli więcej niż jeden typ zmiennej ma taką samą nazwę, używana jest zmienna o najwyższym priorytecie.
Poziom zmiennych środowiskowych systemu
Poziom zmienne środowiskowe użytkownika
Polecenie shell)ZESTAW X = Y) ustawiona w wiersz polecenia przed rozpoczęciem SQLCMD
sqlcmd-v X=Y
: Setvar X Y
Uwaga
Aby wyświetlić zmiennych środowiskowych Panel sterowania, open System, a następnie kliknij przycisk Zaawansowane tab.
Ustawianie niejawnie zmienne wykonywanie wykonywanie skryptów
Podczas uruchamiania SQLCMD z opcja, która ma pokrewnych SQLCMD zmiennejSQLCMD zmienna jest zestaw niejawnie na wartość, która jest określona przy użyciu opcji.W poniższym przykładzie sqlcmd zostanie uruchomiony przy użyciu -l Opcja. To ustawia domyślnie zmienną SQLLOGINTIMEOUT.
c:\> sqlcmd -l 60
Można również użyć -v opcję, aby ustawić wykonywanie wykonywanie skryptów zmienna, która istnieje w skrypcie.W poniższym skrypcie (nazwa pliku jest testscript.sql), ColumnName to zmienna wykonywanie wykonywanie skryptów.
USE AdventureWorks;
SELECT x.$(ColumnName)
FROM Person.Contact x
WHERE c.ContactID < 5;
Następnie można określić nazwę kolumna, która ma zostać zwrócone za pomocą -v Opcja:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Aby przywrócić innej kolumna, wykorzystując ten sam skrypt, zmień wartość ColumnName Zmienna wykonywanie wykonywanie skryptów.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Wskazówki dotyczące tworzenia wykonywanie wykonywanie skryptów nazwy zmiennej i wartości
Gdy nazwy zmiennych wykonywanie wykonywanie skryptów, należy wziąć pod uwagę następujące wskazówki:
W nazwach zmiennych nie może zawierać znaków spacji lub znaków cudzysłowu.
W nazwach zmiennych nie mogą mieć tego samego formularza jako wyrażenie zmiennych, takich jak $(var).
Zmienne wykonywanie wykonywanie skryptów jest rozróżniana wielkość liter
Uwaga
Jeśli wartość nie jest przypisany do SQLCMD zmiennej środowiskowej, zmienna jest usuwany.Za pomocą : setvar NAZWAZMIENNEJ bez wartości czyści zmiennej.
Podczas określania wartości zmiennych wykonywanie wykonywanie skryptów, należy wziąć pod uwagę następujące wskazówki:
Wartości zmiennych, które są zdefiniowane za pomocą setvar or the -v opcji muszą być ujęte w cudzysłowy, jeśli wartości ciąg zawiera spacje.
Jeśli wartość zmiennej zawiera znaki cudzysłowu, należy poprzedzić je znakiem kontrolnym.Na przykład setvar MyVar "spac""e".
Wskazówki dotyczące programu Cmd.exe zestaw nazwy i wartości zmiennej
Zmienne, które są zdefiniowane za pomocą zestaw są częścią środowisko programu Cmd.exe i mogą odwoływać się SQLCMD.Należy wziąć pod uwagę następujące wskazówki:
W nazwach zmiennych nie może zawierać znaków cudzysłowu charactersor odstępu.
Wartości zmiennych mogą zawierać spacji ani znaków cudzysłowu.
Zmienne wykonywanie wykonywanie skryptów SQLCMD
Zmienne, które są definiowane przez SQLCMD są znane jako zmienne wykonywanie wykonywanie skryptów.Następująca tabela zawiera listę SQLCMD wykonywanie wykonywanie skryptów zmiennych.
Variable |
Opcja pokrewne |
R/W |
Default |
---|---|---|---|
SQLCMDUSER * |
-U |
R |
"" |
SQLCMDPASSWORD * |
-P |
-- |
"" |
SQLCMDSERVER * |
-S |
R |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R |
"Nazwa_komputera" |
SQLCMDDBNAME |
-d |
R |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W |
"8" (w sekundach) |
SQLCMDSTATTIMEOUT |
-t |
R/W |
"0" = oczekiwanie przez nieograniczony czas |
SQLCMDHEADERS |
-h |
R/W |
"0" |
SQLCMDCOLSEP |
-s |
R/W |
" " |
SQLCMDCOLWIDTH |
-w |
R/W |
"0" |
SQLCMDPACKETSIZE |
-a |
R |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W |
"0" = nieograniczony |
SQLCMDEDITOR |
R/W |
"edit.com" |
|
SQLCMDINI |
R |
"" |
* SQLCMDUSER, SQLCMDPASSWORD i SQLCMDSERVER zestaw po : Połączenie jest używany.
R wskazuje wartość zestaw tylko jeden raz podczas inicjowania programu.
Odczyt/Zapis wskazuje, że wartość można resetować przy użyciu setvar polecenie i kolejne polecenia użyje nową wartość.
Przykłady
A.Za pomocą polecenia setvar w skrypcie
Wiele SQLCMD opcji może być kontrolowane w skrypcie używając setvar polecenia.W poniższym przykładzie skryptu test.sql w którym zostanie utworzona SQLCMDLOGINTIMEOUT Zmienna jest zestaw do 60 sekund, a innej zmiennej wykonywanie wykonywanie skryptów, server, jest zestaw do testserver. Następujący kod znajduje się w test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks;
SELECT FirstName, LastName
FROM Person.Contact;
The script is then called by using sqlcmd:
sqlcmd -i c:\test.sql
B.Za pomocą polecenia setvar interakcyjne
W poniższym przykładzie jak zestaw wykonywanie wykonywanie skryptów zmiennej interaktywnie przy użyciu setvar polecenie.
sqlcmd
:setvar MYDATABASE AdventureWorks
USE $(MYDATABASE);
GO
Here is the result set.
Changed database context to 'AdventureWorks'
1>
C.Za pomocą wiersz polecenia zmiennych środowiskowych w ramach sqlcmd
W poniższym przykładzie czterech zmiennych środowiskowych are zestaw i następnie wywoływana z sqlcmd.
C:\>SET tablename=Person.Contact
C:\>SET col1=FirstName
C:\>SET col2=LastName
C:\>SET title=Ms.
C:\>sqlcmd -d AdventureWorks
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D.Wykorzystywanie zmiennych środowiskowych poziom użytkownika w ramach sqlcmd
W poniższym przykładzie zmiennych środowiskowych poziom użytkownika %Temp% jest zestaw w wiersz polecenia i przekazany do sqlcmd Plik wejściowy. Aby uzyskać w zmiennej środowiskowej poziom użytkownika, Panel sterowania, kliknij dwukrotnie System.Kliknij przycisk Zaliczki karcie, a następnie kliknij przycisk Zmienne środowiskowe.
Następujący kod znajduje się w pliku wejściowego. c:\testscript.txt:
:OUT $(MyTempDirectory)
USE AdventureWorks;
SELECT FirstName
FROM AdventureWorks.Person.Contact
WHERE ContactID < 5;
Następujący kod jest wprowadzony w wiersz polecenia:
C:\ >SET MyTempDirectory=%Temp%\output.txt
C:\ >sqlcmd -i C:\testscript.txt
Następujące wyniki są wysyłane do pliku wyjściowego C:\Documents and Settings\<użytkownik>\Local Settings\Temp\output.txt.
Changed database context to 'AdventureWorks'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E.Używanie skryptu uruchamiania
A SQLCMD uruchamiania skrypt jest wykonywany po SQLCMD jest uruchomiona.W poniższym przykładzie ustawiany jest zmienna środowiskowa 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
Wymaga to init.sql Kiedy plik sqlcmd jest uruchomiona.
C:\> SET sqlcmdini=c:\init.sql
>1 Sqlcmd
Są to dane wyjściowe.
>1 < user > is connected to < server > (9.00.2047.00)
Uwaga The -X opcja wyłącza funkcję skrypt uruchamiania.
F.Rozszerzanie zmiennych
W poniższym przykładzie pokazano pracy z danymi w postaci SQLCMD zmiennej.
USE AdventureWorks;
CREATE TABLE AdventureWorks.dbo.VariableTest
(
Col1 nvarchar(50)
);
GO
Wstawić jeden wiersz do Col1 z dbo.VariableTest zawiera wartość $(tablename).
INSERT INTO AdventureWorks.dbo.VariableTest(Col1)
VALUES('$(tablename)');
GO
Na sqlcmd monit, jeśli zmienna nie jest zestaw równa $(tablename), poniższe instrukcje zwrotu w wierszu.
C:\> sqlcmd
>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
>2 GO
>3 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
>4 GO
Here is the result set.
>1 Col1
>2 ------------------
>3 $(tablename)
>4
>5 (1 rows affected)
Biorąc pod uwagę zmiennej MyVar jest ustawiona na $(tablename).
>6 :setvar MyVar $(tablename)
Instrukcje te zwracają wiersza i również zwracać komunikatu „ "nazwa_tabeli" wykonywanie wykonywanie skryptów, zmienna 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
Instrukcje te zwracają w wierszu.
>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
>2 GO
>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
>2 GO
See Also