Farklı lokasyonlarda bulunan şubelerle merkez arasında transactional replication kullanıyoruz. Tüm şubeler merkezdeki ana SQL Server üzerinde bulunan kendi kodlarıyla ilişkili veritabanına aktarılmaktadır. Gün geldi, merkezdeki veritabanlarının isimlerinde değişiklik yapmak istedik. Merkezdeki abone görevindeki veritabanın adını değiştirdiğimizde Distributor tarafında The process could not access database ‘Veritabanı Adı’ on server ‘MerkezSunucu Adı’. hatası almaya başladık. Yeniden başlangıç senkronizasyonunu yapmadan replikasyonun kaldığı yerden devam edebilmesi için ya “Replication » Local Publication” menüsünden eski subscription database kaydını silip “New Subscriptions” bölümünden yeni abonelik oluşturulur veya Job ve sistem tabloları üzerinde aşağıdaki değişiklikleri yapmak gerekir.
Okumaya devam et
Aylık arşivler: Şubat 2012
Stored Procedure – Tek Parametreyle Tek veya Tüm Kayıtları Seçme
Dışarıdan parametre alan bir Stored Procedure içerisinde parametreye göre bazen sadece o değere eşit olan kaydı bazen de tüm kayıtları getirmesini isteyebiliriz. Bu tür durumlarda tablodan seçim yapmadan önce parametrenin boş ve dolu olduğuna bakarız. Eğer dolu ise WHERE bölümüne kolon filtresi ekleriz boş ise herhangi bir kısıtlama eklemeyiz ki tüm tablo listelensin. Bu amaçla genellikel prosedür üzerinde seçmeli parametre tanımlanır.
CREATE PROCEDURE GetKategori(@KategoriId int=NULL) AS IF @KategoriId IS NULL SELECT * FROM Kategori ELSE SELECT * FROM Kategori WHERE KategoriId=@KategoriId
SQL – Tekrar Eden Kolon Değerleri Göstermemek
Raporlama ekranlarında özellikle hiyerarşik verilerin bulunduğu bir kolonda tekrar eden değerleri göstermeyiz. Bunu Web veya Windows tarafında yapmak tercih edilir. Peki SQL tarafında bunu kolayca nasıl sağlayabiliriz. Makalelerde kullandığımız Kategori ve Urun tablosunu düşünelim.
Okumaya devam et
Tablodaki Satır Değişmiş mi ? (CHECKSUM ve timestamp)
SQL Server’da uygulamamız için kritik olan tablodaki bazı veya tüm alanların değişip değişmediğini öğrenmemiz gerektiğinde bunun için ya log, history gibi arşiv tabloları oluşturulur veya o satır değiştiği zaman o satır için tanımlı versiyon numarasını değiştiririz. Tarihçe tablolarını oluşturmamız hem değişiklik olup olmadığını hem de verilerin eski ve yeni değerlerini görmemize imkan tanır. Ancak değişiklik olup olmadığını anlamak için tarihçe tablosu ile ana tabloyu JOIN edip kolon seviyesinde fark olup olmadığına bakmamız gerekir. Bu da uğraştırıcı bir durum olduğu için sadece bu amaç için tarihçe tablosu oluşturmak mantıklı olmayabilir. SQL Server’in sunduğu CHECKSUM() fonksiyonu ve timestamp veri türü bu aşamada kolaylık sağmaktadır. Kontrol sayısı olarak türkçeleştirebileceğimiz CHECKSUM() fonksiyonu parametre olarak aldığı değer için bir hash değeri döndürür. Bu değer normal bir veri olabileceği gibi bir kolon veya kolonlar listesi de olabilir.
Okumaya devam et