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 ve T-SQL betik görevlerinin otomatikleştirilmesine yönelik bir komut satırı yardımcı programıdır. sqlcmd etkileşimli olarak kullanmak veya sqlcmdiçin betik dosyaları oluşturmak için T-SQL'i anlamanız gerekir. sqlcmd çeşitli şekillerde kullanabilirsiniz. Örneğin:

  • Komut isteminden T-SQL deyimlerini girin. Konsol sonuçları döndürür. Komut İstemi penceresini açmak için Windows arama kutusuna cmd girin ve açmak için Komut İstemi seçin. Komut isteminde, sqlcmd yazın ve ardından istediğiniz seçeneklerin listesini yazın. sqlcmdtarafından desteklenen seçeneklerin tam listesi için sqlcmd yardımcı programınabakın.

  • 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 komut isteminde de görüntülenebilir.

  • SQL Server Management Studio (SSMS) Sorgu Düzenleyicisi'nde 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 çıkışını yerleştirdiği 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 ve 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 AdventureWorks2022.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 AdventureWorks2022.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ı tarafından desteklenen seçeneklerin listesini görmek için şu komutu çalıştırın: sqlcmd -?.

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

Komut İstemi penceresinde T-SQL deyimlerini yürütmek için sqlcmd yardımcı programını etkileşimli olarak kullanabilirsiniz. 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>

Komut giriş dosyaları veya sorguları olmadan yürütülürken, sqlcmd belirtilen SQL Server örneğine bağlanır ve ardından 1> içeren yeni bir çizgi ve ardından sqlcmd istemi olarak adlandırılan yanıp sönen alt çizgi görüntüler. 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 T-SQL deyimi komut önbelleği adlı bir arabelleğe konur. 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 komutu verildikten sonra deyim önbelleğinin yürütülmesini durdurmak için de kullanılabilir.

Etkileşimli bir oturuma girilen T-SQL deyimleri, :ED komutu ve sqlcmd komut istemi girilerek düzenlenebilir. 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

Tırnak içine alınmış karakterler, ek ön işleme olmadan kullanılır; ancak, ardışık iki tırnak işareti girilerek bir dizeye tırnak işaretleri eklenebilir. 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, sqlcmd etkileşimli olarak çalıştırdığınızda gördüklerinize bir örnektir.

Komut İstemi penceresini açtığınızda şuna benzer bir satır vardır:

C:\Temp\>

Bu, C:\Temp\ klasörün geçerli klasör olduğu anlamına gelir ve bir dosya adı belirtirseniz, Windows bu klasördeki dosyayı arar.

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

C:\Temp>sqlcmd
1>

Bu, SQL Server örneğine bağlandığınız ve sqlcmd artık T-SQL ifadelerini kabul etmeye ve sqlcmd komutlarını çalıştırmaya hazır olduğu anlamına gelir. 1> sonra yanıp sönen alt çizgi, yazdığınız deyimlerin ve komutların görüntülendiği konumu işaretleyen sqlcmd istemidir. Şimdi USE AdventureWorks2022 yazın ve enter basın, ardından GO yazıp enter basın. Komut İstemi penceresinin içeriği aşağıdaki gibidir:

sqlcmd
USE AdventureWorks2022;
GO

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

Changed database context to 'AdventureWorks2022'.
1>

Enter'a bastığınızda, sqlcmd'e yeni bir satır başlatması için sinyal gönderilir. yazdıktan sonra GO tuşuna basılması sqlcmd USE AdventureWorks2022 deyimini SQL Server örneğine göndermesini sağlar. sqlcmd, USE deyiminin başarıyla tamamlandığını belirten bir ileti döndürür ve yeni bir deyim veya komut girmek için sinyal olarak yeni bir 1> istemi görüntüler.

Aşağıdaki örnek, bir SELECT deyimi, GOyürütmek için bir SELECT ve sqlcmd EXITçıkmak için bir yazdığınızda Komut İstemi penceresinin neler içerdiğini gösterir:

USE AdventureWorks2022;
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

Çıktıyı oluşturduktan sonra sqlcmdsqlcmd istemini sıfırlar ve 1> görüntülenir. Oturumdan çıkmak için EXIT isteminde 1> yazın. Artık başka bir EXIT komutu yazarak Komut İstemi 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), geliştirme, hata ayıklama ve analiz amacıyla hızla bir SQL Server örneği oluşturmak üzere kapsayıcı görüntüsü ve SQL Server yedeklemesi belirtmenize olanak tanıyan bir create deyimi sunar.

Important

Dockerveya Podmangibi bir konteyner çalışma zamanı yüklemeniz 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 2022'nin (16.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 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak

SQL Server örneği oluşturulduktan sonra sqlcmd (Go) kullanarak bu örneği yönetebilir ve sorgulayabilirsiniz.

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

sqlcmd query "SELECT @@version"

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

sqlcmd query

Aşağıdaki komut Azure Data Studio'yu açar ve oluşturma işlemi sırasında geri yüklenen veritabanına otomatik olarak bağlanır:

sqlcmd open ads

Aşağıdaki komut, oluşturulan ö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 komut kullanılır:

sqlcmd delete

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

veritabanı betik dosyalarını yürütmek için sqlcmd kullanabilirsiniz. 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 girilen 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ı oluşturmanın farklı yolları vardır:

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

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

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 AdventureWorks2022;
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. Komut istemine aşağıdaki komutu girerek betiği çalıştırın ve çıktıyı MyOutput.txt içine MyFolderyerleştirin.

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

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

Changed database context to 'AdventureWorks2022'.
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 örnekte, sqlcmd ayrılmış yönetici bağlantısı (DAC) kullanılarak engelleme sorunu olan bir sunucuya bağlanmak için kullanılı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 AdventureWorks2022;
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 istemine aşağıdakileri 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 yürütmek 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 önceki GO fark edin.

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

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

Aşağıdaki örnekte, XML çıkışının sürekli bir akışta biçimlendirilmemiş olarak nasıl döndürülmüş olduğu gösterilmektedir.

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

F. Windows betik dosyasında sqlcmd kullanma

gibi bir sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt, komutu VBScript ile birlikte bir .bat dosyasında yürütülebilir. Bu durumda etkileşimli seçenekleri kullanmayın. sqlcmd .bat dosyasını yürüten 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 komut isteminde C:\Temp\windowsscript.batçalıştırın:

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

SQLCMD returned 100 to the command shell

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

sqlcmd, şifreleme ve sertifika güveni belirtmek için SQL Veritabanı verilerine bağlantıda yürütülebilir. İki sqlcmd seçeneği mevcuttur:

  • -N anahtarı, istemci tarafından şifreli bağlantı istemek için kullanılır. Bu seçenek, ENCRYPT = trueADO.net seçeneğine eşdeğerdir.

  • -C anahtarı, istemci tarafından sunucu sertifikasına örtük olarak güvenmek ve doğrulama yapmamak üzere yapılandırmak için kullanılır. 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çenekleri özel durum oluşturmaz ancak kullanılamaz. Kullanım dışı bırakıldılar:

  • 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.