Aracılığıyla paylaş


SQLCMD'yi betik değişkenleriyle kullanma

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

sqlcmd yardımcı programı Transact-SQL deyimlerini, sistem yordamlarını ve betik dosyalarını girmenizi sağlar.

Note

Sisteminizde hangi sqlcmd değişkeninin ve sürümünün yüklü olduğunu öğrenmek için bkz. Sqlcmd yardımcı programının yüklü sürümünü denetleme. sqlcmd'yi alma hakkında bilgi için bkz. sqlcmd yardımcı programını indirme ve yükleme.

sqlcmd'de betik değişkenleri

Betiklerde kullanılan değişkenler betik oluşturma değişkenleri olarak adlandırılır. Betik değişkenleri, bir betiğin birden çok senaryoda kullanılmasını sağlar. Örneğin, her sunucu için betiği değiştirmek yerine birden çok sunucuda bir betik çalıştırmak istiyorsanız, sunucu adı için bir betik değişkeni kullanabilirsiniz. Betik değişkenine sağlanan sunucu adı değiştirilerek, aynı betik farklı sunucularda yürütülebilir.

Betik değişkenleri, setvar komutu kullanılarak açıkça veya sqlcmd -v seçeneği kullanılarak örtük olarak tanımlanabilir.

Bu makale, kullanarak SETkomut satırında ortam değişkenlerini tanımlayan örnekler de içerir.

setvar komutuyla betik değişkenlerini ayarlama

setvar komutu betik değişkenlerini tanımlar. komutu kullanılarak setvar tanımlanan değişkenler dahili olarak depolanır. Komut dosyası değişkenleri, SETkullanılarak komut isteminde tanımlanan ortam değişkenleriyle karıştırılmamalıdır. Betik ortam değişkeni olmayan veya kullanılarak setvartanımlanmayan bir değişkene başvuruda bulunursa bir hata iletisi döndürülür ve betiğin yürütülmesi durdurulur. Daha fazla bilgi için sqlcmd-b seçeneğine bakın.

Değişken önceliği (düşük-yüksek)

Birden fazla değişken türü aynı ada sahip olduğunda, öncelik sırası en yüksek olan değişken kullanılır.

  1. Sistem düzeyinde ortam değişkenleri
  2. Kullanıcı düzeyinde ortam değişkenleri
  3. Komut isteminde, SET X=Y başlatılmadan önce () Komut Kabuğu ayarlanır.
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Note

Windows 11'de ortam değişkenlerini görüntülemek için Ayarlar'ı açın, Ardından Sistem>Hakkında'ya gidin ve Gelişmiş sistem ayarları bağlantısını seçin. Sistem Özellikleri penceresinde Ortam Değişkenleri'ni seçin. Linux'ta komut satırına yazın printenv ve macOS'ta yazın env.

Betik değişkenlerini örtük olarak ayarlama

sqlcmd ilgili sqlcmd değişkeni olan bir seçenekle başlattığınızda, sqlcmd değişkeni, seçeneği kullanılarak belirtilen değere örtük olarak ayarlanır. Aşağıdaki örnekte, sqlcmd seçeneğiyle -l başlatılır. Bu, SQLLOGINTIMEOUT değişkenini örtük olarak ayarlar.

sqlcmd -l 60

Ayrıca, -v seçeneğini kullanarak bir betikte bulunan bir betik değişkeni ayarlayabilirsiniz. Aşağıdaki betikte (dosya adı testscript.sql), ColumnName bir betik değişkenidir.

USE AdventureWorks2022;

SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;

Ardından, -v seçeneğini kullanarak döndürülmesini istediğiniz sütunun adını belirtebilirsiniz:

sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

Aynı betiği kullanarak farklı bir sütun döndürmek için ColumnName betik değişkeninin değerini değiştirin.

sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql

Betik oluşturma için değişken adları ve değerleriyle ilgili yönergeler

Betik değişkenlerini adlandırırken aşağıdaki yönergeleri göz önünde bulundurun:

  • Değişken adları boşluk karakterleri veya tırnak işaretleri içermemelidir.

  • Değişken adları, $(var) gibi bir değişken ifadesiyle aynı forma sahip olmamalıdır.

  • Betik değişkenleri büyük/küçük harfe duyarlı değildir.

    Note

    sqlcmd ortam değişkenine hiçbir değer atanmazsa değişken kaldırılır. değer olmadan :setvar VarName kullanılması değişkeni temizler.

Betik değişkenleri için değerler belirtirken aşağıdaki yönergeleri göz önünde bulundurun:

  • setvar veya -v seçeneği kullanılarak tanımlanan değişken değerleri, eğer dize değeri boşluk içeriyorsa tırnak işaretleri içine alınmalıdır.
  • Eğer tırnak işaretleri değişken değerinin bir parçasıysa, kaçış karakteri kullanılmalıdır. Örneğin:setvar MyVar "spac""e".

cmd.exe SET değişken değerleri ve adları için yönergeler

SET kullanılarak tanımlanan değişkenler cmd.exe ortamının bir parçasıdır ve sqlcmdtarafından başvurulabilir. Aşağıdaki yönergeleri göz önünde bulundurun:

  • Değişken adları boşluk karakterleri veya tırnak işaretleri içermemelidir.
  • Değişken değerleri boşluk veya tırnak işareti içerebilir.

sqlcmd betik değişkenleri

Variable İlgili seçenek 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" (saniye)
SQLCMDSTATTIMEOUT -t R/W 3 "0" = süresiz olarak bekleyin
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" = sınırsız
SQLCMDEDITOR R/W 3 "edit.com"
SQLCMDINI R 2 ""

kullanıldığında SQLCMDUSER, SQLCMDPASSWORD ve SQLCMDSERVER :Connect ayarlanır.

2 R değerin program başlatma sırasında yalnızca bir kez ayarlanabileceğini gösterir.

3 R/W komutu kullanılarak değerin sıfırlanabilir olduğunu ve sonraki komutların setvar yeni değeri kullandığını gösterir.

Examples

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

A. Betikte setvar komutunu kullanma

Birçok sqlcmd seçeneği, setvar komutu kullanılarak bir betikte denetlenebilir. Aşağıdaki örnekte, test.sql değişkeninin SQLCMDLOGINTIMEOUT saniye olarak ayarlandığı ve 60başka bir betik değişkeninin serverolarak ayarlandığı betik testserver oluşturulur. Aşağıdaki kod test.sqliçindedir.

:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)

USE AdventureWorks2022;

SELECT FirstName, LastName
FROM Person.Person;

Ardından betik, sqlcmd ile çalıştırılır:

sqlcmd -i c:\test.sql

B. setvar komutunu etkileşimli olarak kullanma

Aşağıdaki örnekte, setvar komutunu kullanarak etkileşimli olarak bir betik değişkeninin nasıl ayarlanacağı gösterilmektedir.

sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO

Sonuç kümesi aşağıdadır.

Changed database context to 'AdventureWorks2022'
1>

C. sqlcmd içinde komut istemi ortam değişkenlerini kullanma

Aşağıdaki örnekte, are dört ortam değişkeni önce ayarlanır ve ardından sqlcmd'den çağrılır.

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. sqlcmd içinde kullanıcı düzeyinde ortam değişkenlerini kullanma

Aşağıdaki örnekte, kullanıcı düzeyinde ortam değişkeni %Temp% komut isteminde ayarlanır ve sqlcmd giriş dosyasına geçirilir. Kullanıcı düzeyinde ortam değişkenini almak için Denetim Masasıiçinde, Sistem'e çift tıklayın. Gelişmiş sekmesini seçin ve ardından ortam değişkenlerini seçin.

Aşağıdaki kod C:\testscript.txtgiriş dosyasındadır:

:OUT $(MyTempDirectory)
USE AdventureWorks2022;

SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;

Komut isteminde aşağıdaki kod girilir:

SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt

Aşağıdaki sonuç C:\Documents and Settings\<user>\Local Settings\Temp\output.txtçıkış dosyasına gönderilir.

Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto

(4 rows affected)

E. Bir başlangıç betiği kullanın

sqlcmd başlangıç betiği, sqlcmd başlatıldığında yürütülür. Aşağıdaki örnek SQLCMDINIortam değişkenini ayarlar. Bu, init.sql. içeriğidir

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

Bu, init.sql başlatıldığında sqlcmd dosyasını çağırır.

SET sqlcmdini=c:\init.sql
sqlcmd

Bu çıktıdır.

1> <user> is connected to <server> (9.00.2047.00)

Note

-X seçeneği başlangıç betiği özelliğini devre dışı bırakır.

F. Değişken genişletme

Aşağıdaki örnekte verilerle sqlcmd değişkeni biçiminde çalışma gösterilmektedir.

USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO

Col1 içinde, dbo.VariableTest'e değer olarak $(tablename) içeren bir satır ekleyin.

INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO

sqlcmd isteminde, hiçbir değişken $(tablename)değerine eşit olarak ayarlanmadığında, aşağıdaki ifadeler veritabanı satırını döndürür ve ayrıca "'tablename' betik değişkeni tanımlanmadı" iletisini gösterir. Varsayılan olarak, sqlcmd bayrağı -b ayarlanmadı. -b ayarlanırsa, sqlcmd "değişken tanımlanmadı" hatasından sonra sonlandırılır.

sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO

Sonuç kümesi aşağıdadır.

1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)

MyVar değişkeni $(tablename)olarak ayarlandığından emin olun.

6> :setvar MyVar $(tablename)

Bu ifadeler satırı döndürür ve ayrıca "'tablename' betik değişkeni tanımlanmadı." mesajını döndürür.

6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO

1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO

Bu ifadeler satırı döndürürler.

1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO