SQL Server – BCP ve SQLCMD ile Veri transferi gerçekleştirin..

By | April 10, 2013

Merhaba,

BCP : Sql Server üzerinden veri dosyası transfer etmek için kullanılır. Kullanımı için Başlat -> Çalıştır -> cmd -> bcp yazdığınızda bilgiler gelecektir.

SQLCMD : Microsoft SQL Server 2000 deki isql veya osql olarak bilinen aracın geliştirilmiş halidir. Sqlcmd T-SQL ifadelerini comandline (komut satırı) üzerinden çalıtırmamıza imkan vermektedir. Buradan girilien bilgiler istenildiği takdirde çıktı olarak alınabilir.

Şimdi bizler uygulamamıza başlıyoruz.

Öncelikli olarak ben TEST isimli veri tabanım da 2 adet procedure oluşturacağım bunlardan bir tanesi veri select edecek diğeri ise export işlemi gerçekleştirecek. BCPData isimli procedure oluşturuyoruz.

create proc BCPData as
select 'Çağlar' Ad,'Özenç' Soyad

oluşturduğumuz procedure çalıştırdığımızda Ad column da Çağlar Soyad column da ise Özenç bilgisi dönecektir. Şimdi ise asıl işlemimizi gerçekleştireceğimiz procedure yazalım. BCPExportData isimli procedure ise Export işlemi yapmamızı sağlayacaktır.

create proc BCPExportData as

declare @SQL  varchar(1000)
declare @DosyaYolu Varchar(100)
declare @DosyaAdi varchar(100)

SET    @DosyaYolu = 'C:BCP'

SET    @DosyaAdi = 'BCP_' +
       + CONVERT(VARCHAR, GETDATE(), 112) + '_' +
         CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR) + '_' +
         CAST(DATEPART(MINUTE,GETDATE()) AS VARCHAR) + '.txt'

SET    @SQL =
       'SQLCMD -S (local) -E -d TEST -q "EXEC BCPData" -o "' +
       @DosyaYolu + @DosyaAdi +
       '" -h-1'

exec master..xp_cmdshell @SQL
GO

Yukarıdaki @SQL değişkeni içerisinde = değerinden sonra SQLCMD ile başlayan kısımda anlatılan Default instance kurulmuş bir bilgisayarıda TEST isimli database bağlanıp BCPData isimli procedure çalıştır denilmiştir.

Tanımlamalarımız bitti şimdi BCPExportData isimli procedure çalıştırdık ama hayır olamaz bir hata mesajı çıktı karşımıza..

Hata Mesajı :

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.

Hata Çözümü :

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',1
GO
RECONFIGURE
GO

Yukarıdaki yazılanları çalıştırdıktan sonra Procedure çalıştırdığımızda C:BCP isimli klasörün içerisine dosyanın oluştuğunu göreceksiniz.

2 thoughts on “SQL Server – BCP ve SQLCMD ile Veri transferi gerçekleştirin..

  1. YAŞAR BAYRAM

    iYİ GÜNLER ELİNİZE SAĞLIK ARADIĞIM TAMDA BU, AMA TXT DOYASI DEĞİLDE XLS OLARAK STUNLAR HALİNDE VİEW DOSYASINDAN VERİLERİ ALMAK İSTİYORUM. VERİYİ ALIYOR FAKAT SONUÇ TEK BLOK HALİNDE TXT ŞEKLİNDE. YARDIMCI OLABİLİRSENİZ ÇOK MAKBULE GEÇER. AMAÇ JOB İLE ALDIĞIM VERİLERİ B2B SİSTEMİNE AKTARMAK. B2B DEN GELEN VERİLERİDE MIKRO YAZILIMA İLGİLİ SİPARİŞ DOSYASINA AKTARMAK.
    ELİNİZE SAĞLIK TEŞEKKÜRLER.

    Reply
    1. Caglar Ozenc Post author

      Merhaba,
      Azure Data Studio aracılığı ile select sorgunuzu csv olarak alabilir ve xls (excel) dönüştürebilirsiniz.

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *