Normalde bir tablonun kontrolünü yapmak için birden fazla yöntem bulunmaktadır. Genellikle veritabanı içindeki ‘Tables’ klasöründe filtreleme yaparak arama yaparız. Ancak, çok sayıda veritabanına sahip sunucularda bu yöntemle arama yapmak zaman kaybına neden olabilir.
Aşağıdaki üç yöntemden birini seçerek tablo kontrollerinizi daha pratik bir şekilde gerçekleştirebilirsiniz.
Yöntem 1 : Aşağıdaki SQL sorgusu ile veritabanlarını tek tek seçerek aratma yapabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DECLARE @TabloAdi NVARCHAR(255) SET @TabloAdi = ‘TabloAdiGiriniz’ IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ‘BASE TABLE’ AND TABLE_NAME = @TabloAdi ) BEGIN PRINT ‘Tablo seçtiğiniz DB’‘de mevcut.’ END ELSE BEGIN PRINT ‘Tablo seçtiğiniz DB’‘de mevcut değil.’ END |
Çıktı 1 :
Yöntem 2 : Döngü yardımıyla tek tek veritabanı seçimi yapmadan, tüm veritabanları içerisinde tablo aratmak istersek aşağıdaki sorguyu kullanabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
DECLARE @tabloadi NVARCHAR(50); SET @tabloadi = ‘TabloAdiGiriniz’; DECLARE DatabaseCursor CURSOR FOR SELECT name FROM sys.databases; DECLARE @database NVARCHAR(50) DECLARE @sonuc BIT OPEN DatabaseCursor FETCH NEXT FROM DatabaseCursor INTO @database WHILE @@FETCH_STATUS = 0 BEGIN SET @sonuc = ( SELECT COUNT(*) FROM sys.tables WHERE name = @tabloadi AND schema_id = SCHEMA_ID(‘dbo’) AND object_id = OBJECT_ID(@database + ‘.dbo.’ + @tabloadi) ); IF @sonuc > 0 BEGIN PRINT @database + ‘ database’‘sinde ‘ + @tabloadi + ‘ tablosu var.’; END ELSE BEGIN PRINT @database + ‘ database’‘sinde ‘ + @tabloadi + ‘ tablosu yok.’; END FETCH NEXT FROM DatabaseCursor INTO @database END CLOSE DatabaseCursor DEALLOCATE DatabaseCursor |
Çıktı 2 :
Yöntem 3 : Yukarıdaki döngü aslında işimizi görecektir; ancak, bu tür işlemleriniz sıkça gerçekleşiyorsa SP (Stored Procedure) kullanarak aynı tabloyu aratmayı tercih edebilirsiniz. SP’yi query kısayollarına ekleyip daha pratik bir şekilde kullanabilirsiniz.
Öncelikle aşağıdaki şekilde yeni Stored Procedure oluşturuyoruz “TabloVarMi” ismini verdim ben. Siz burada istediğinizi yazabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
CREATE PROCEDURE TabloVarMi @TabloAdi NVARCHAR(255) AS BEGIN DECLARE @DbAdi NVARCHAR(255) DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE state_desc = ‘ONLINE’ OPEN db_cursor FETCH NEXT FROM db_cursor INTO @DbAdi WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @SqlSorgu NVARCHAR(MAX) SET @SqlSorgu = ‘IF EXISTS (SELECT 1 FROM [‘ + @DbAdi + ‘].INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ‘‘BASE TABLE’‘ AND TABLE_NAME = N’” + @TabloAdi + ”‘) PRINT ‘‘Tablo mevcut: ‘ + @DbAdi + ”” EXEC sp_executesql @SqlSorgu FETCH NEXT FROM db_cursor INTO @DbAdi END CLOSE db_cursor DEALLOCATE db_cursor END |
SP’yi oluşturduktan sonra aşağıdaki şekilde tablomuzu aratabiliriz. “AWBuildVersion” benim aratmak istediğim tablo. Siz burada kendiniz aratacağınız tabloyu yazmanız gerekiyor.
1 |
exec TabloVarMi AWBuildVersion |
Çıktı 3 :