Ana Sayfa > SQL Server > SQL Dosyalarını toplu olarak çalıştırmak

SQL Dosyalarını toplu olarak çalıştırmak

Bazen bir yada daha fazla veritabanında çalıştırılmak üzere bekleyen sorgu dosyalarımız vardır,
bu sorguları tek tek açıp execute etmeniz gerekir ve bu çok sıkıcı gelebilir.

Aşağıdaki sql sorgusu ile, belirli bir dizinde topladığımız “.sql” uzantılı dosyaları toplu olarak execute edebiliriz.
yapmanız gereken dizini ve login bilgilerini girmek. Yanında açıklama bulunan satırları sisteminize uygun olarak girip execute ettiğinizde, dizindeki tüm sql dosyaları çalışmış olacaktır.

Bu işlem “xp_cmdshell” yardımı gerçekleştiğinden öncelikle xp_cmdshell kullanımını Enabled yapmalısınız.
bunu nasıl yapacağımızı anlattığım linkde aşağıdadır.

“sp_configure” kullanarak “xp_cmdshell” i Enable yapmak

CREATE TABLE ##Sorgular ( SqlDosyaAdi VARCHAR(2000))
GO
--
DECLARE @SQLDizini nVARCHAR(100)
SET @SQLDizini='D:\ORHAN'     -- .sql uzantılı dosyalar dizini
DECLARE @dosyalistesi nVARCHAR(100)
SET @dosyalistesi='dir /b "'+@SQLDizini+'*.sql"'
--
INSERT INTO ##Sorgular
EXECUTE master.dbo.xp_cmdshell @dosyalistesi
GO
DECLARE cFiles CURSOR LOCAL FOR
    SELECT DISTINCT [SqlDosyaAdi]
    FROM ##Sorgular
    WHERE [SqlDosyaAdi] IS NOT NULL AND
          [SqlDosyaAdi] != 'NULL'
   ORDER BY [SqlDosyaAdi]
DECLARE @dosyaadi VARCHAR(200)
DECLARE @sqlcumlesi VARCHAR(4000)
DECLARE @SQLDizini2 nVARCHAR(100)
DECLARE @sunucu nVARCHAR(100)
DECLARE @databaseadi nVARCHAR(100)
DECLARE @sqluser nVARCHAR(100)
DECLARE @sqlpass nVARCHAR(100)
SET @sunucu='orhan'           -- Sql Server adı
SET @databaseadi='orhandb'    -- Sorguların çalışmasını istediğiniz database
SET @sqluser='sa'             -- SQL User
SET @sqlpass='pass'           -- SQL User
SET @SQLDizini2='D:\ORHAN'    -- .sql uzantılı dosyalar dizini
OPEN cFiles
FETCH NEXT FROM cFiles INTO @dosyaadi
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sqlcumlesi = 'master.dbo.xp_cmdshell ''osql -S '+@sunucu+' -U '+@sqluser+
    ' -P '+@sqlpass+' -d '+@databaseadi+' -i "'+@SQLDizini2 + @dosyaadi + '"'''
    EXECUTE (@sqlcumlesi)
    FETCH NEXT FROM cFiles INTO @dosyaadi
END
CLOSE cFiles
DEALLOCATE cFiles
GO
DROP TABLE ##Sorgular

Benzer yazılar

Yorum Yaz