Aracılığıyla paylaş


sqlcmd kullanma

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

sqlcmd , Transact-SQL (T-SQL) deyimlerinin ve betiklerinin geçici, etkileşimli yürütülmesine yönelik bir komut satırı yardımcı programıdır. Ayrıca T-SQL betik görevlerini otomatikleştirir. sqlcmd'yi etkileşimli olarak kullanmak veya sqlcmd için betik dosyaları oluşturmak için T-SQL'i anlamanız gerekir. sqlcmd çeşitli şekillerde kullanabilirsiniz. Örneğin:

  • Komut satırı arabiriminden (CLI) T-SQL deyimleri girin. Konsol sonuçları döndürür.

    Note

    Windows'ta, Windows arama kutusuna cmd yazıp Komut İstemi'ni seçerek bir Komut İstemi penceresi açabilirsiniz. macOS ve Linux'ta yerleşik terminal öykünücüsü kullanabilirsiniz.

    Konsola yazın sqlcmd , ardından istediğiniz seçeneklerin listesini yazın ve ardından Enter tuşuna basın. sqlcmd'nin desteklediği seçeneklerin tam listesi için bkz. sqlcmd yardımcı programı.

  • Yürütülecek tek bir T-SQL sorgusunu belirterek veya utility'i yürütülecek T-SQL sorgularını içeren bir metin dosyasına yönlendirerek sqlcmd işini gönderin. Çıkış bir metin dosyasına yönlendirilir, ancak konsolda da görüntülenebilir.

  • SQL Server Management Studio'da (SSMS) SQLCMD modu.

  • SQL Server Yönetim Nesneleri (SMO).

  • SQL Server Agent CmdExec görevleri.

Yaygın sqlcmd seçenekleri

  • Sunucu seçeneği (-S) sqlcmd bağlandığı SQL Server örneğini tanımlar.

  • Kimlik doğrulama seçenekleri (-E, -Uve -P), sqlcmd SQL Server örneğine bağlanmak için kullandığı kimlik bilgilerini belirtir.

    Note

    seçeneği -E varsayılandır ve belirtilmesi gerekmez.

  • Giriş seçenekleri (-Q, -qve -i), sqlcmd 'teki girdinin konumunuolarak tanımlar.

  • Çıkış seçeneği (-o), sqlcmd'nin çıkışını yazdığı dosyayı belirtir.

sqlcmd yardımcı programıyla bağlantı kurma

  • T-SQL deyimlerini etkileşimli olarak çalıştırmak için Windows Kimlik Doğrulamasını kullanarak varsayılan örneğe bağlanın:

    sqlcmd -S <ComputerName>
    

    Note

    Önceki örnekte, -E varsayılan olduğundan belirtilmemiştir. sqlcmd , Windows Kimlik Doğrulaması'nı kullanarak varsayılan örneğe bağlanır.

  • T-SQL deyimlerini etkileşimli olarak çalıştırmak için Windows Kimlik Doğrulaması kullanarak adlandırılmış örneğe bağlanın:

    sqlcmd -S <ComputerName>\<InstanceName>
    

    or

    sqlcmd -S .\<InstanceName>
    
  • Windows Kimlik Doğrulaması kullanarak ve giriş ve çıkış dosyalarını belirterek adlandırılmış örneğe bağlanın:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
    
  • Windows Kimlik Doğrulaması ile yerel bilgisayardaki varsayılan örneğe bağlanın, bir sorgu yürütin ve sorgu tamamlandıktan sonra sqlcmd çalışır durumda tutun:

    sqlcmd -q "SELECT * FROM AdventureWorks2025.Person.Person"
    
  • Windows Kimlik Doğrulaması ile yerel bilgisayardaki varsayılan örneğe bağlanın, bir sorgu yürütün, çıkışı bir dosyaya yönlendirin ve sorgu tamamlandıktan sonra sqlcmd'dan çıkın.

    sqlcmd -Q "SELECT * FROM AdventureWorks2025.Person.Person" -o MyOutput.txt
    
  • ile sqlcmd, parola isteğinde bulunarak T-SQL deyimlerini etkileşimli olarak çalıştırmak için SQL Server Kimlik Doğrulaması kullanarak belirtilmiş bir örneğe bağlanın.

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
    

    Tip

    sqlcmd yardımcı programının desteklediği seçeneklerin listesini görmek için şunu çalıştırın: sqlcmd -?.

sqlcmd kullanarak Transact-SQL deyimlerini etkileşimli olarak çalıştırma

Konsolda T-SQL deyimlerini yürütmek için sqlcmd yardımcı programını etkileşimli olarak kullanın. sqlcmdkullanarak T-SQL deyimlerini etkileşimli olarak yürütmek için -Q, -q, -Zveya -i seçeneklerini kullanmadan giriş dosyalarını veya sorgularını belirtmek üzere yardımcı programını çalıştırın. Örneğin:

sqlcmd -S <ComputerName>\<InstanceName>

Komutu giriş dosyaları veya sorguları olmadan çalıştırdığınızda , sqlcmd belirtilen SQL Server örneğine bağlanır. Yeni bir satır görüntüler ve ardından sqlcmd istemi olarak adlandırılan yanıp sönen alt çizgi 1> gelir. 1 bunun bir T-SQL deyiminin ilk satırı olduğunu bildirir ve sqlcmd istemi, T-SQL deyimini yazdığınızda başlama noktasıdır.

sqlcmd isteminde, T-SQL deyimlerini ve ve GO gibi sqlcmd EXIT yazabilirsiniz. Her bir T-SQL komutu, deyim önbelleği denilen bir arabelleğe gider. Bu ifadeler, GO komutunu yazıp Enterbastıktan sonra SQL Server'a gönderilir. sqlcmd'dan çıkmak için, yeni satırın başına EXIT veya QUIT yazın.

Deyim önbelleğini temizlemek için :RESETyazın. Ctrl+C yazmak sqlcmd'in çıkmasına neden olur. Ctrl+C , bir GO komuttan sonra deyim önbelleğinin yürütülmesini durdurmak için de kullanılabilir.

T-SQL deyimlerini düzenlemek için sqlcmd isteminde :ED komutunu girin. Düzenleyici açılır ve T-SQL deyimini düzenleyip düzenleyiciyi kapattıktan sonra, düzeltilmiş T-SQL deyimi komut penceresinde görünür. Düzeltilmiş T-SQL deyimini çalıştırmak için GO girin.

Tırnak içine alınmış metin dizgileri

Ardışık iki tırnak işareti girerek bir dizeye tırnak işareti ekleyebilmeniz dışında, fazladan ön işlem yapmadan tırnak içine alınmış karakterleri kullanabilirsiniz. SQL Server bu karakter dizisini tek bir tırnak işareti olarak ele alır. (Ancak, çeviri sunucuda gerçekleşir.) Betik değişkenleri, bir dize içinde göründüklerinde genişletilmiyor.

Örneğin:

sqlcmd
PRINT "Length: 5"" 7'";
GO

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

Length: 5" 7'

Birden çok satıra yayılan dizeler

sqlcmd birden çok satıra yayılan dizeleri destekler. Örneğin, aşağıdaki SELECT deyimi birden çok satıra yayılarak GO yazıp enter tuşuna bastıktan sonra tek bir dize olarak yürütülür.

SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO

Etkileşimli sqlcmd örneği

Bu örnekte , sqlcmd'i etkileşimli olarak çalıştırdığınızda ne gördüğünüz gösterilir.

Windows'da bir konsol penceresi açtığınızda, aşağıdaki örneğe benzer bir çıktı görebilirsiniz:

C:\Temp\>

Bu satır, klasörün geçerli klasör C:\Temp\ olduğu anlamına gelir. Bir dosya adı belirtirseniz, işletim sistemi bu klasördeki dosyayı arar.

Yerel bilgisayardaki varsayılan SQL Server örneğine bağlanmak için sqlcmd yazın. Konsol penceresinin içeriği aşağıdaki gibidir:

C:\Temp>sqlcmd
1>

Bu çıkış, SQL Server örneğine bağlandığınız anlamına gelir. sqlcmd artık T-SQL deyimlerini ve sqlcmd komutlarını kabul etmeye hazırdır. 1> öğesinden sonraki yanıp sönen alt çizgi sqlcmd komut istemidir. Yazdığınız deyimlerin ve komutların görüntülendiği konumu işaretler. Şimdi yazın USE AdventureWorks2025 ve Enter tuşuna basın. Ardından yazın GO ve Enter tuşuna basın. Konsolun içeriği aşağıdaki gibidir:

sqlcmd
USE AdventureWorks2025;
GO

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

Changed database context to 'AdventureWorks2025'.
1>

Enter'a bastığınızda, sqlcmd'e yeni bir satır başlatması için sinyal gönderilir. Yazdıktan sonra GO basmanız, sqlcmd'nin komutunu SQL Server örneğine göndereceğini belirtir. sqlcmd daha sonra deyimin USE başarıyla tamamlandığını belirten bir ileti döndürür. Yeni bir 1> istem, yeni bir deyim veya komut girmek için bir sinyal olarak görüntülenir.

Aşağıdaki örnekte, bir SELECT deyimi yazdığınızda, SELECT'yi yürütmek için bir GO ve sqlcmd'den çıkmak için bir EXIT yazdığınızda konsolun neler içerdiği görülmektedir.

USE AdventureWorks2025;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

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

BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie

sqlcmd çıktı oluşturduktan sonra sqlcmd istemini sıfırlar ve görüntüler1>. EXIT yazın ve oturumdan çıkmak için 1> istemini kullanın. Şimdi başka bir EXIT komut yazıp Enter tuşuna basarak konsol penceresini kapatabilirsiniz.

SQL Server kapsayıcısı oluşturma ve sorgulama

Kapsayıcıda yeni bir SQL Server örneği oluşturmak için sqlcmd (Go) kullanabilirsiniz. sqlcmd (Go), kapsayıcı create görüntüsünü ve SQL Server yedeklemesini belirtmek için bir ifade sunar. Geliştirme, hata ayıklama ve analiz amacıyla hızla bir SQL Server örneği oluşturabilirsiniz.

Important

Docker veya Podman gibi bir kapsayıcı çalışma zamanının yüklü olması gerekir.

Aşağıdaki komut, yeni bir SQL Server kapsayıcısı oluşturmak için kullanılabilen tüm seçeneklerin nasıl görüntüleneceği gösterir:

sqlcmd create mssql --help

Aşağıdaki komut, SQL Server 2025'in (17.x) en son sürümünü kullanarak yeni bir SQL Server örneği oluşturur ve ardından Wide World Importers örnek veritabanını geri yükler:

sqlcmd create mssql --accept-eula --tag 2025-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak

SQL Server örneğini oluşturduktan sonra yönetmek ve sorgulamak için sqlcmd (Go) kullanın.

Aşağıdaki komut, oluşturduğunuz örneğin sürümünü onaylar:

sqlcmd query "SELECT @@version"

Aşağıdaki komut, oluşturduğunuz örnekle etkileşimli bir oturum başlatır:

sqlcmd query

Aşağıdaki komut, oluşturduğunuz örneğe bağlanmak için kullanılacak bağlantı dizelerini listeler:

sqlcmd config connection-strings

Artık gerekli olmadığında kapsayıcıyı kaldırmak için aşağıdaki komutu kullanın:

sqlcmd delete

sqlcmd kullanarak Transact-SQL betik dosyalarını çalıştırma

Veritabanı betik dosyalarını çalıştırmak için sqlcmd kullanın. Betik dosyaları, T-SQL deyimlerinin bir karışımını, sqlcmd komutlarını ve betik değişkenlerini içeren metin dosyalarıdır. Değişkenlerle betik hazırlama hakkında daha fazla bilgi için bkz. sqlcmd'yi değişkenlerle kullanma. sqlcmd , bir betik dosyasındaki deyimler, komutlar ve betik oluşturma değişkenleriyle etkileşimli olarak girdiğiniz deyimler ve komutlarla nasıl çalıştığına benzer şekilde çalışır. Temel fark, sqlcmd kullanıcının deyimleri, komutları ve betik değişkenlerini girmesini beklemek yerine giriş dosyasını duraklatmadan okumasıdır.

Veritabanı betik dosyalarını farklı yollarla oluşturabilirsiniz:

  • SQL Server Management Studio'da bir dizi T-SQL deyimini etkileşimli olarak derleyip hatalarını ayıklayın ve sorgu penceresinin içeriğini betik dosyası olarak kaydedin.

  • Not Defteri gibi bir metin düzenleyicisi kullanarak T-SQL deyimleri içeren bir metin dosyası oluşturun.

Examples

A. sqlcmd kullanarak bir betiği çalıştırma

Not Defteri'ni başlatın ve aşağıdaki T-SQL deyimlerini yazın:

USE AdventureWorks2025;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

MyFolder adlı bir klasör oluşturun ve betiği MyScript.sqlklasörüne dosya C:\MyFolder olarak kaydedin. Betiği çalıştırmak ve çıktıyı MyOutput.txtMyFolderiçine yerleştirmek için konsola aşağıdaki komutu girin:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

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

Changed database context to 'AdventureWorks2025'.
BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie
(3 rows affected)

B. Ayrılmış yönetim bağlantısıyla sqlcmd kullanma

Aşağıdaki örnek, ayrılmış yönetici bağlantısını (DAC) kullanarak engelleme sorunu olan bir sunucuya bağlanmak için sqlcmd kullanır.

C:\Temp\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;
2> GO

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

session_id   blocking_session_id
-----------  --------------------`
62           64
(1 rows affected)

Engelleme işlemini sonlandırmak için sqlcmd kullanın.

1> KILL 64;
2> GO

C. Saklı bir yordam çalıştırmak için sqlcmd kullanın

Aşağıdaki örnekte, sqlcmdkullanarak bir saklı yordamın nasıl yürütüldiği gösterilmektedir. Aşağıdaki saklı yordamı oluşturun.

USE AdventureWorks2025;
GO

IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL
    DROP PROCEDURE dbo.ContactEmailAddress;
GO

CREATE PROCEDURE dbo.ContactEmailAddress (
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50)
)
AS
SET NOCOUNT ON;

SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
    AND LastName = @LastName;

SET NOCOUNT OFF;
GO

sqlcmd isteminde aşağıdaki komutu girin:

C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com

D. Veritabanı bakımı için sqlcmd kullanma

Aşağıdaki örnekte, veritabanı bakım görevi için sqlcmd nasıl kullanılacağı gösterilmektedir. Aşağıdaki kodla C:\Temp\BackupTemplate.sql oluşturun.

USE master;
BACKUP DATABASE [$(db)] TO DISK = '$(bakfile)';

sqlcmd istemine aşağıdaki kodu girin:

C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E. Birden çok örnekte kod çalıştırmak için sqlcmd kullanma

Aşağıdaki dosyada yer alan kod, iki örneğe bağlantı kuran bir betiği göstermektedir. İkinci örneğe bağlantı yapmadan önce dikkat edin GO.

:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO

F. XML çıktısı döndürme

Aşağıdaki örnekte XML çıkışının biçimlendirilmemiş, sürekli akış olarak nasıl döndürdüğü gösterilmektedir.

C:\Temp\>sqlcmd -d AdventureWorks2025
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,

G. Windows betik dosyasında sqlcmd kullanma

VBScript ile birlikte bir dosyada, örneğin bir sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt komutunu .bat çalıştırabilirsiniz. Bu senaryoda etkileşimli seçenekleri kullanmayın. sqlcmd dosyasını çalıştıran .bat bilgisayara yüklenmelidir.

İlk olarak, C:\Tempiçinde aşağıdaki dört dosyayı oluşturun:

  • C:\Temp\badscript.sql

    SELECT batch_1_this_is_an_error
    GO
    SELECT 'batch #2'
    GO
    
  • C:\Temp\goodscript.sql

    SELECT 'batch #1';
    GO
    SELECT 'batch #2';
    GO
    
  • C:\Temp\returnvalue.sql

    :exit(select 100)
    
  • C:\Temp\windowsscript.bat

    @echo off
    
    echo Running badscript.sql
    sqlcmd -i badscript.sql -b -o out.log
    if not errorlevel 1 goto next1
    echo == An error occurred
    
    :next1
    
    echo Running goodscript.sql
    sqlcmd -i goodscript.sql -b -o out.log
    if not errorlevel 1 goto next2
    echo == An error occurred
    
    :next2
    echo Running returnvalue.sql
    sqlcmd -i returnvalue.sql -o out.log
    echo SQLCMD returned %errorlevel% to the command shell
    
    :exit
    

Ardından konsolda komutunu çalıştırın C:\Temp\windowsscript.bat :

C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql

SQLCMD returned 100 to the command shell

H. Azure SQL Veritabanı'nda şifrelemeyi ayarlamak için sqlcmd kullanma

Şifreleme ve sertifika güveni belirtmek için sqlcmd'yi SQL Veritabanı verilerine bağlantıda çalıştırabilirsiniz. İki sqlcmd seçeneği mevcuttur:

  • -N anahtarı, şifreli bağlantı için istemcinin isteğidir. Bu seçenek, ENCRYPT = trueADO.NET seçeneğine eşdeğerdir.

  • anahtarı, -C istemciyi sunucu sertifikasına örtük olarak güvenecek ve doğrulamayacak şekilde yapılandırıyor. Bu seçenek, TRUSTSERVERCERTIFICATE = trueADO.NET seçeneğine eşdeğerdir.

SQL Veritabanı hizmeti, SQL Server örneğinde kullanılabilen tüm SET seçeneklerini desteklemez. Aşağıdaki seçenekler, ilgili SET seçeneği ON veya OFFolarak ayarlandığında bir hata oluşturur:

  • SET ANSI_DEFAULTS
  • SET ANSI_NULLS
  • SET REMOTE_PROC_TRANSACTIONS
  • SET ANSI_NULL_DEFAULT

Aşağıdaki SET seçenekler kullanım dışıdır. İstisna atmazlar ama kullanılamazlar.

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntax

Aşağıdaki örnekler, SQL Server Yerel İstemci Sağlayıcısı ayarlarının şunları içerdiği durumlara başvurur:

  • ForceProtocolEncryption = False
  • Trust Server Certificate = No

Windows kimlik bilgilerini kullanarak bağlanın ve iletişimi şifreleyin:

sqlcmd -E -N

Windows kimlik bilgilerini kullanarak bağlanın ve sunucu sertifikasına güvenin:

sqlcmd -E -C

Windows kimlik bilgilerini kullanarak bağlanın, iletişimi şifreleyin ve sunucu sertifikasına güvenin:

sqlcmd -E -N -C

Aşağıdaki örnekler, SQL Server Yerel İstemci Sağlayıcısı ayarlarının şunları içerdiği durumlara başvurur:

  • ForceProtocolEncryption = True
  • TrustServerCertificate = Yes

Windows kimlik bilgilerini kullanarak bağlanın, iletişimi şifreleyin ve sunucu sertifikasına güvenin:

sqlcmd -E

Windows kimlik bilgilerini kullanarak bağlanın, iletişimi şifreleyin ve sunucu sertifikasına güvenin:

sqlcmd -E -N

Windows kimlik bilgilerini kullanarak bağlanın, iletişimi şifreleyin ve sunucu sertifikasına güvenin:

sqlcmd -E -C

Windows kimlik bilgilerini kullanarak bağlanın, iletişimi şifreleyin ve sunucu sertifikasına güvenin:

sqlcmd -E -N -C

Sağlayıcı ForceProtocolEncryption = Truebelirtirse, bağlantı dizesinde Encrypt=No bile şifreleme etkinleştirilir.