MSSQL Bir Veriyi Tüm Tablolarda Aramak

Codx

Katılımcı Üye
30 Tem 2017
309
1


Merhabalar, iyi forumlar herkese.

Sizinle nadiren olsada, kullanmaya ihtiyaç duyduğum ve cidden hayat kurtaran bir sorguyu paylaşmak istiyorum.

Ne Yapacağız?
Yapacağımız şey kısaca yazdığımız sorgu yardımı ile belirttiğimiz verinin bulunduğu tabloların bize sunulmasını amaçlayarak kod yazacağız.

Başlayalım
SQL Server Management Studio'yu açıyor ve New Query butonuna basıyoruz.

Bir adet Search Value tanımlayacağız. Bu value içerisine arama değerimizi gireceğiz. Bir adet başında # işareti bulunan Temp tablo oluşturacağız. Sonucumuzun veri tabanına kayıtlı olarak kalmasını istemediğimiz için geçici tabloya kayıt etmeyi tercih ediyoruz. Değişkenimizi tanımlayıp, geçici tabloyu create etmek için;



Bunun altına bana sunduğu verilerin toplamda kaç tane olduğunu daha rahat bir şekilde görebilmek için SET NOCOUNT ON yazıyorum.

Not: Bunu yazma sebebime kısaca değinecek olursam, ben oluşturduğum temp tablo içerisine her seferinde insert yapacağım için her seferinde 1 row affacted sonucunu vermesi yerine toplam kaç tane buluduğunu vermesini istiyorum. Bu konu hakkında görseller üzerinden anlatıma buradan ulaşabilirsiniz.

Şimdi bir tablo adı, bir kolon adı, ve bir adet daha searchStr tanımlayacağız. Sorgumuzun son hali şu şekilde olacaktır;



Table Name değişkenini tanımlayıp boş olarak set ediyoruz. SearchStr2'yi QUOTENAME fonksiyonu yardımı ile set ediyoruz. Bu fonksiyon iki arguman alır. Bu fonksiyon hakkında buradan bilgi alabilirsiniz. Birkaç kullanımı olmakla birlikte buradaki amaç isimlendirmektir.

Bir while döngümüz olacak. Bu döngü başında tableName alanımız null değilse kontrolü olacak. Biz null olmayacak ama içerisinde bir değer de bulunmayacak şekilde set etmiştik. İşleminin sonuna gelindiği taktirde null olarak geri dönecektir. Bu sayede işlem tamamlanmış olacaktır.

Ardından kolon adını da aynı şekilde null olmadan fakat içerisinde bir değer de bulunmadan set edeceğiz. Bu döngünün içerisinde null döndüğü zaman döngüden çıkabilmesi için bunu yapmamız gerekiyor.



Burada yapılan işlemi açıklayacak olursam eğer,



Buradan TABLE_TYPE'ı BASE TABLE olanları sorguya dahil ediyorum. View'ler de birer tablodur sonuç olarak. Kendilerine insert update ve delete işlemi yapılmaz. Tablolar üzerinde bulunan verileri belli sorguları çalıştırıp bazı kriterlerden geçirerek kullanıcıya sunar.

Not: Aynı veriler select sorguları yazılarak da elde edilebilir fakat view normal tablolardan daha hızlı bir şekilde sonuç döndürmektedir.

Where koşulumun sonunda ise IsMSShipped'ı 0'a eşit olanları listelemek istiyorum. ObjectProperty fonksiyonu hakkında detaylı bilgiyi buradan edinebilirsiniz. Benim burada kullanma amacım Sql Server yüklenirken yüklü gelenleri değil sonradan bizim tarafımızdan değişiklik yapılmış olanları listelemek.

Tablo adımızı doldurduk. Şimdi yapmamız gereken kolon adını doldurmak. Açtığımız while içerisinde ColumnName alnını boş olarak set ettik yani şuanki değeri null değil. Null olana kadar devam etmesi için bir while daha yazıyoruz.



Burada yapılan işlemi kısaca açıklayacak olursam eğer,



Bu tablodan, TABLE_SCHEMA değeri TableName değişkeninin shema name'e ParseName fonksiyonu ile convert edilmiş haline ve TABLE_NAME değeri TableName değişkeninin Object name'e ParsName ile convert edilmiş haline ve bu şartları karşılayanların içinden DATA_TYPE'ı char, varchar, nvarchar, nchar, int olanları son olarak benim boş olarak gönderdiğim stiringden uzun bir değere sahip olan alanları select ediyorum.

Not: Bu ve bir önceki while döngüsünde > operatörünü string bir ifade için kullanmıştık. Bu benim boş olarak set ettiğim değerlerden uzun olanları yani boş olmayanları listelemek için kullanılmıştır.

Burası bizim kolon adını doldurduğumuz yerdi sonuçlarımız neredeyse hazır. Şimdi oluşturduğumuz temp tablo içerisine bunları insert edelim. Eğer boş değilse koşuluna sahip bir if bloğu oluşturmalıyız.

Not: Sorguyu şuan çalıştırıp çalıştığına emin olmak istediğimde invalid column name hatası aldım. Temp tablomun adını değiştirdim sorunum çözüldü.



Sorgumuza ekleyeceğimiz son kısmımız bu şekildedir. Kodların tamamına buradan ulaşabilirsiniz.

Son olarak nasıl çalıştığını göstermek istiyorum. White kelimesini pubs database üzerinde aratacağım, ve sonuç,



Daha önceki konularımdan birisi için bu tabloyu kopyalamıştım bunu bulmuş oldu.

Şimdilik paylaşacaklarım bu kadardı.

Okuduğunuz için teşekkür eder, iyi forumlar dilerim.


 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.