Posts Tagged :

mssql

Kolon Adını Tablolarda Aramak 150 150 mezo

Kolon Adını Tablolarda Aramak

Merhaba arkadaşlar
Uzun zamandır bir konu anlatmıyorum ancak hatalar ve düzeltilmeleri ile ilgili yazılar paylaşıyorum en kısa zamanda bir kaç güzel konu ile karşınızda olacağım 🙂
Sizlere bahsetmek istediğim kısa konum SQL de Kolon Adını Tablolarda Aramak: Diyelim ki database içersinde sadece kolon adını biliyorsunuz veya kolon adının içinden bir kelime hatırlıyorsunuz hangi tabloda merak ediyorsunuz işte size güzel bir sorgu 🙂 Bu sorgu ile kolon adına göre tablo araması yapabilirsiniz. İşte o sorgu 🙂

select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%aranacak_kelime%'
and TABLE_CATALOG='Database_Adi'

Umarım yararlı olur
Bilgiyle Kalın
M.Zeki OSMANCIK

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 622 197 mezo

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası

Merhaba gençler 🙂

Hemen size sıcak sıcak bilgi paylaşayım.

MS SQL server mı kullanıyorsunuz ?  Veritabanlarınızı başka bir yerden restore veya attach mi yaptınız ?  Login kullanıcı SA nin db yetkilerini vermek mi istiyorsunuz ama başaramıyormusunuz ? İşte doğru adrestesiniz 😀

Konumuz Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 🙂  5 dk önce beni deli eden ama çözümü basit bir problemden bahsedeceğim şimdi.

Veritabanlarını restore ettikten sonra SA kullanıcısına dbowner yetkisi vermek istediğimde karşıma böyle bir hata çıktı

Hatamızın görüntüsü şöyle güzel bir hata :

Untitled picture

Bu hatayı alıyorsanız hiç uğraşmayın arkadaşlar hemen New Query hangi DB ile işlem yapacaksanız seçin ve şu kodu çalıştırın olsun bitsin 🙂

 

exec sp_changedbowner 'sa','true'

 

Umarım Yararlı Olur

Bilgiyle Kalın 🙂

M.Zeki Osmancık

 

The type initializer Hatası… 611 193 mezo

The type initializer Hatası…

Merhaba arkadaşlar
Sql Server 2008 i kaldırıp tekrar kurmak zorunda kaldım. ancak bunu yaptığımda karşıma bir hata çıktı. Sizlerle paylaşmak istedim hata şöyle

vVkwW
Error >

TITLE: Microsoft SQL Server Management Studio
——————————

The type initializer for ‘Microsoft.SqlServer.Management.Dmf.PolicyStore’ threw an exception. (Microsoft.SqlServer.Dmf)

——————————
ADDITIONAL INFORMATION:

Could not load file or assembly ‘Microsoft.SqlServer.Diagnostics.STrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91′ or one of its dependencies. The system cannot find the file specified. (Microsoft.SqlServer.Dmf)

——————————
Internette araştırınca gerekli gereksiz herkes bir şeyler söylemiş yok onu yükle yok Visual Studio yu kaldır kur yok onu ekle kaldır gibi gibi. Bunlardan bazılarını deneyip vakit kaybettikten sonra bir şey denemek geldi içimden bir ses dediki REPAIR et yeğen dedi.
Çalıştırdım SQL Server Setup ı ve Repair ettim ve sorun çözüldü 🙂

Umarım faydalı olur
Bilgiyle Kalın
M.Zeki Osmancık

LDF Olmadan Database Oluşturmak 512 512 mezo

LDF Olmadan Database Oluşturmak

Merhaba arkadaşlar
Sabahın köründe karşıma çıkan ilginç bir konuyu sizlerle paylaşmak istiyorum. LDF dosyası olmadan database oluşturabilir miyiz ? Cevabımız evet
Neden böyle birşey isteyelim ki demeyin isteyen istiyor 😀
İşte gerekli scrip 😀

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

MS SQL’de satır numarasını alma 150 150 mezo

MS SQL’de satır numarasını alma

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,
    id, ilceAdi
  FROM Ilce
) AS foo
WHERE rownumber = 5
E-Book Gallery for Microsoft Technologies 100 100 mezo

E-Book Gallery for Microsoft Technologies

If you want to learn about Microsoft technologies you can use  E-Book Gallery for Microsoft Technologies 🙂

Click Here…

I hope that is helpful

May the knowledge be with you

M.Zeki Osmancık

Linq To SQL _ Insert Update Delete 570 571 mezo

Linq To SQL _ Insert Update Delete

Merhaba arkadaşlar

Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.

Insert

Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.

NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();

Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.

Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım.  ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.

Kayıt Seçme İşlemi

Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:

Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.

NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID == 
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;

Update

Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :

NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();

Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.

Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :

NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();

Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.

db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;

Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

LinqToSQL _ Select 992 608 mezo

LinqToSQL _ Select

Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.

Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉

Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.

Select sorgusu nasıl yapılır ?

Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource =  db.GetTable<Category>();

Select sorgusuna Where kriteri ekleme işlemi ?

Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc;

Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc;

 

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc;

 

Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.

Umarım Yararlı Olur

Bilgiyle Kalın.

M.Zeki Osmancık

SQL _ Trigger 713 381 mezo

SQL _ Trigger

Merhaba arkadaşlar

Fazla zamanım olmadığı için blogla fazla ilgilenemiyorum  işte o nadir bulduğum zamanlardan birtanesinde daha  yararlı olacağını umduğum bir konu ile sizlerleyim. (TV programı gibi oldu ama idare edin artık :D) .

Bugün sizlere parmaklarımın yazabildiği kadar trigger anlatmak istiyorum.

Trigger Nedir?  Önce bu soruya çok basit bir bakış açısı ile bakalım yani trigger in türkçe meali ile.  Ne dersiniz ? Evet dediğinizi duyar gibiyim adeta 😀  Trigger tetik demektir. Nasıl yani tetik bildiğimiz silahlardaki tetikten işte 😉  Tetik çekildiğinde nasıl silah bir takım işlemler gerçekleşiyor ve kurşun atıyor . Sql dede bazı işlemlerden sonra otomatik olarak başka işlemlerin yapılmasını yani tetiklenmesini isteyebiliriz böyle bir yapıyı Trigger dediğimiz kod parçaları gerçekleştirirler…

Peki Trigger dediğimiz olay nasıl yazılır yada yapılır???

 

Triggerlar, Query ekranında T-SQL kodu ile veya Management Studio ile oluşturulup yönetilebilirler ve  View  ve tablolar üzerinde tanımlanabilir.  CREATE TRIGGER komutunu  kullanabilmek için sysadmin, db_owner veya db_ddladmin  rolüne sahip olmak gerekir.  Bir trigger başka bir tabloya erişecekse bu tablo için de trigger oluşturan kullanıcının erişim izni veya güncelleme izni olması gerekir.

 

Peki trigger ‘ ları ne zaman kullanırız ?

*  Değişiklikleri takip etmek için,

* Birincil anahtar üretmek için,

* Karmaşık iş kurallarını gerçekleştirmek için,

* E-posta atmak gibi olayları otomatik olarak yapmak için,

* Standart hata mesajlarının dışında bir hata mesajı elde etmek için,

* Veritabanı erişimlerini takip edebilmek için,

* Nesnede meydana gelebilecek değişiklikleri takip ve engellemek için kullanabiliriz.

 

Trigger dediğimiz yapı kendi içinde 2 ye tekrar o  bölünenlerden biride  ikiye ayrılır 😀 çokmu karışık oldu ? 😀 yani özetle şöyle :

DDL Trigger’lar: Create, Alter ve Drop işlemleri gerçekleştiğinde çalışan trigger’lardır.

DML Trigger’lar: Insert, Update ve Delete işlemleri gerçekleştiğinde çalışan trigger’lardır.

CREATE TRIGGER tetikleyici_adiON tablo_adiFOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)AS Sql ifadeleri

 

After (For) Trigger’ı: After triggerları, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir.

Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After triggerları tanımlanabilir.

Create Trigger Tg_SilinenKayıtlar

On Employees

After Delete

As

Begin

Declare @Ad nvarchar(50)

Declare @CalisanID İnt

Select @Ad=FirstName,@CalisanID=Employees From Deleted

Select CalisanID,Ad+’-Silinmiştir’,GetDate()From Deleted

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad+’- Silindi’,GetDate())

End

Instead Of Trigger’ı: Instead of triggerları, belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. Instead of triggerlari işlemlerin arasına girebildiğinden kontrol amaçlı kullanılabilirler. Tıpkı After triggerları gibi temel veritabanı işlemleri için Instead Of triggerları  tanımlanabilir.

Alter Trigger Tg_CalisanKayitRaporOn EmployeesAfter InsertASBegin

Declare @Ad Nvarchar(50)

Declare @CalisanID int

Select @Ad = FirstName,@CalisanID = EmployeeID From Inserted

 

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad,GetDate())

End

 

INSERT – UPDATE – DELETE

Trigger devreye girdikten sonra Inserted veya Deleted tablolarında yeni eklenen veya silinen kayıtların bir kopyası tutulur.

Trigger Update (ALTER)

CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler

yapmak üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.

 

Trigger Silmek (DROP)

Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak açılan menüden Delete komutunu vererek silebilirsiniz.

Delete Trigger Tg_CalisanKayitRapor

Trigger Enable ya da Disable

Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum oluştuğunda otomatik olarak devreye girer. İstenildiğinde oluşturulan bu tetikleyiciler pasif

hâle getirilebilir. Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde tetikleyici pasif hâle gelir.

ALTER TABLE tablo_adiDISABLE TRIGGER Musteri_SilmeveyaENABLED TRIGGER Musteri_Silme

 

Umarım yararlı olur…

 

M.Zeki Osmancık.

 

SQL _ Stored Procedure 600 545 mezo

SQL _ Stored Procedure

Merhaba arkadaşlar bu yazımızda Sql içersinde bulunan ve hayat kurtaran Stored Procedure konusuna değineceğiz.

Bir amaca ulaşmak için takip edilen yol ve yöntem tanımından yola çıkılarak, bir prosedür herhangi bir işlevi yerine getirebilmek için yazılan kodların bir paket içersinde tutulmuş halidir diyebiliriz.

Stored procedure kullanmanın bize sağladığı yararlardan kısaca bahsetmek gerekirse :
• Çalışırken bazı planlamaların doğru olarak yapılmasını sağlar ve tekrar tekrar kullanılabilir bir yapıdır.
• İçersine yazılan sorgulara parametrelendirme özelliği katar.
• Uygulamalar  arasında kullanılabilir.
• Güvenli data giriş çıkış ve düzenlemesi sağlar.
• Daha az network bandwidth kaynak kullanımı sağlar.
• Job olarak tanımlanabilir ve schedule edilebilir.
• Database objelerine daha güvenli erişim olanağı tanır.
Stored procedure bileşenleri parçalara ayırır yani parsing işlemi gerçekleştirir.
Yani ilk olarak ; Veritabanı içersinde view table vb. nesnelere gönderme yapan referanslar varsa geçerli olup olmadıklarını (nesnenin ve iznin olup olmadığı) kontrol eder.Kontrollerden geçen SP nin adı sysobject tablosuna kodları ise syscomments tablosuna kaydedilir.
Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.
Stored Procedure herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk defa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde Stored Procedure’ün derlenmiş haliçalışır. Bundan dolayı Stored Procedure’ler derlenen nesnelerden biri olarak bilinir.

Stored Procedure Oluşturmak

CREATE PROC [ EDURE ] prosedür_adıAST-SQL ifadeleri

Değişiklik Yapmak

ALTER PROC [EDURE] prosedür_adıAST-SQL ifadeleri

Bir Stored Procedure’de değişiklik yapabilmek için önce kaynak kodunun alınması ve bir Query ekranına kopyalanıp düzenlenmesi gerekir.

Stored Procedure’ü Silmek

DROP PROC  sahip.prosedür_adı

Var olan bir Stored Procedure’ü silmek için DROP komutunu kullanmak gereklidir.

DROP komutundan sonra Stored Procedure’ün sahibinin adı ve Stored Procedure’ün adı yazılmalıdır.

Değer Alan Stored Procedure’ler

Stored Procedure’lerin daha etkin kullanılabilmesi ve işlevsel bir hale gelebilmesi için dışarıdan değer almalarına ihtiyaç duyulur. Bu nedenle girdi parametreleri (Input Parameter) kullanılır.

Değer Alıp-Veren Stored Procedure’ler

Değer alıp-veren stored procedure ler, query’den gönderilen değerleri alıp istenilen işleme tabi tuttuktan sonra elde edilen sonucu tekrar Query’e gönderen prosedürlerdir. Buişlem için OUTPUT parametresi kullanılır.

RETURN Deyimi

Prosedürden tek bir tamsayı değer döndürmek için bir başka seçenek olarak RETURN ifadesi kullanılabilir. Bu şekilde OUTPUT parametresini hem prosedür içinde hem de prosedürün çağrıldığı yerde tanımlamak zorunda kalınmadan doğrudan değer döndürülebilir.

Store Procedureler  kısaca bu kadar…

Umarım yararlı olur.

Tekrar görüşmek üzere…

M.Zeki Osmancık

MSSQL Database Terminolojisi 150 150 mezo

MSSQL Database Terminolojisi

Merhaba arkadaşlar bu yazımızda veritabanı ile alakalı bazı terimleri sizlere açıklamaya çalışacağım.

VeriTabanı (Database):Verilerin fiziksel hafızada saklandığı  datafiles ve bu verilerin olaylarının loglandığı log dosyalarından oluşan en az 2 dosyadan oluşan yapıları SQL Server VeriTabanı (Database) olarak değerlendirir.

Schema (Şema):Bir veritabanı içersinde yaratılan farklı  schemalar içersinde aynı isimde tablolar ,store procedureler gibi farklı nesneler yaratabilmek mümkün oluyor böylelikle database içersindeki nesneleri gruplara ayırarak çalışmayı kolaylaştırabiliyoruz.

Table (Tablo) :Günlük hayatta kullandığımız liste mantığı ile oluşturduğumuz nesnelerdir.Yani bir sınıf listesinden tutun alışveriş listesine kadar tüm listeleri tablo olarak tanımlayabiliriz. Teknik olarak bakarsakta satır ve sütunlardan oluşan veri saklayabilen veritabanının en temel nesnesi diyebiliriz.

ResultSet (Sonuç Kümesi): Bir seçme ve listeleme  işlemi gerçekleştiğinde bazen bir bazen birden fazla tablo kullanılarak hazırlanan ve veritabanı üzerinde mevcut olmayan tabloların hepsi birer sonuç kümesidir.

Row (Satır): Tablo üzerinde mevcut olan her bir kayıt bir satıra denk gelir.

Column(Sütun): Tablolarda dikey sütunların yanyana gelmesi ile meydana gelmiştir. Bir ürün tablosunu ele alacak olursan her ürün bir satır bu ürünün her bir bilgiside sütundur.

Field (Alan): Yapılandırılmış  bilginin her bir kısmını saklamak üzere yapılan tanımlamadır. Bu alanın uzunluğu ne kadar olacak harf ise ne kadar harf alabilir, rakam ise kaç basamaklı olacak bu türden soruları yanıtlamak için bir alan tanımlamak ve bu alanada bir veri tipi belirtmemiz gerekir.

Data Type (Veri Tipi): Bilgisayar kayırları yapısal olarak tutarken onların yapıları hakkında fikir sahibi olabilmek için bazı özellikleri önceden tanımlanması gerekir. İşte bu özellikleri belirten tipler veri tipleridir.

Record (Kayıt) : Yapılandırılmış verilerden her birine bir kayıt denir.  Yani alan bilgileri ile birlikte her bir satır kayıttır.

Constrait (Kısıtlayıcı) : Herhangi bir alan içersine girilebilecek bilgileri zorlayıcı kurallara denir. Birincil Anahtar Kısıtlayıcı , Tekill Kısıtlayıcı , Default Kısıtlayıcı, Yabancı Anahtar Kısıtlayıcı, Kontrol Kısıtlayıcı olmak üzere 5 tür kısıtlayıcı vardır.

Default  : Tabloda bir alana değer girilmediğinde bu alan için standart olarak önceden bizim belirttiğimiz bir veri veya verinin ilk giriş işlemi esnasında otomatik olarak  bu sütuna atanması.

Rule (Kural):Bir alana girilebilecek verilerin bir kurala bağlı olmak üzere girilmeye zorlanması için yapılan tanımlamalara denir.

Indexes (İndeksler) : Bir kaç yüz kayıttan oluşan bir tablo üstüne kayıt arama işlemi veritabanı yönetim sistemi için oldukça basit bir işlemdir ancak bu sayı milyonlara çıktığında çeşitli kriterlere bağlı olarak organize edip sıralayacak bu sayede hızlı erişimi sağlayacak yapılar vardır. Veriler fiziksel olarak düzenleniyorsa CLUSTERED INDEX (Kümelenmiş), fiziksel olarak düzenlenmiyorsa UNCLUSTERED  INDEX(Kümelenmemiş) adını alır.

View : Bazen hazırlanan sorguların veya elde edilen sonuç kümelerinin bir tablo gibi davranması istendiğinde View kullanılarak bu sanal tablo oluşturulur.

Synonim : View den farklı olarak tablolar dışındaki store procedureler gibi nesnelerede takma adlar verebilmemizi sağlar.

Stored Procedure (Kaydedilmiş Yordamlar) : SQL kodları çalıştırılmadan önce veritabanı yönetim sistemi tarafından yorumlanır ve derlenir  ardından çalıştırılmak istenen kod çalışır ve sonuç kümesi elde edilir. Bu işlem sırasındaki yorumlama ve derleme kısmı veritabanı yönetim sistemine ek bir yük getirir. Bunu hızlandırabilmek için derlenmiş ve yorumlanmış ifadeleri kullanabiliriz. Bu derlenmiş ifadeler Stored Procedurelerdir. Genellikle veri erişim katmanı olarak kodlanırlar.

Cursor (İmleç) : Veritabanında bulunan kayıtlara satır satır erişmek istediğimizde bu işi bizim yerimize imleçler halleder. İmleçler genellikle veritabanı üzerindeki verilere baım yapılırken kullanılırlar.

Trigger (Tetikleyici) : Triggerler veritabanı üzerindeki veriler ile ilgili ekleme, silme , düzenleme gibi işlemler yerine veya bu işlemlerden sonra otomatik olarak yapılacak olan işlemlerin belirtildiği yapılardır.  Veri bütünlüğünü sağlamak amacıyla kullanılırlar.

UDF User Defined Functions (Kullanıcı Tanımlı Fonksiyonlar) : UDF ler genellikle karmaşık işlemlerin  tek bir sefer fonksiyon olarak kaydedilip daha sonra sadece isimleri ile çağrılabilen bir yapıdır. Stored Procedure lerden tek farkı select sorguları içersinde onların bir parçası gibi kullanılabilmeleridir.

User Defined Types  (Kullanıcı Tanımlı Tipler): SQL server 2005 den itibaren 8K yi aşmamak için kendi gereksinimlerimizi  giderebilmek için oluşturduğumuz kendine özgü metotlarıda içersinde bulundurabilen tiplerdir.

Umarım yararlı olur

Sonraki yazılarda görüşmek üzere …

M.Zeki Osmancık

TSQL _ Select 387 260 mezo

TSQL _ Select

Merhaba Arkadaşlar . Bu yazımızda TSQL den bahsetmek istiyorum.  Veritabanı programları ile uğraşanların yada biz programcıların sürekli kullandığı hatta bazen baş belası olabilen bu SQL neymiş ona bakalım.

SQL (Structured Query Language) yani Yapılandırılmış  Sorgulama Dili anlamına gelen veritabanı sorgulama dilidir. SQL, düzeltilmesi veya değiştirilmesi istenen bilgileri açıkça belirtmeye izin veren ve yerine getirilebilecek başlıca işlemleri tanımlamamızı sağlayan bir komut takımıdır

Sql deki kodları :

Veri İşleme Dili – DML (Data Manipulation Language )

Veri Tanımlama Dili – DDL (Data Definition Language)

Veri Kontrol Dili  – DCL(Data Control Language)

Olarak gruplayabiliriz.

Bu gruplar içersinde hangi kodlar var peki?

Veri İşleme Dili – DML (Data Manipulation Language )

SQL Veri İşleme Dili veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür.

SELECT : Veri seçmek

DELETE : Veri silmek

UPDATE : Veri güncellemek

INSERT : Veri girmek

Veri Tanımlama Dili – DDL (Data Definition Language)

SQL Veri Tanımlama Dili verilerin tutulduğu nesneler olan tabloların yaratılmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar.

CREATE TABLE : Yeni bir tablo yaratmak

ALTER TABLE : Tabloda değişiklik yapmak

DROP TABLE : Tabloyu silemek

CREATE INDEX : Tabloda dizin oluşturmak

Veri Kontrol Dili  – DCL(Data Control Language)

SQL Veri Kontrol Dili bir veritabanı kullanıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar.

GRANT :Kullanıcıya yetki vermek

DENY:Kullanıcı, grup veya rolü herhangi bir eylem için engeller.

REVOKE:Daha atanmış olan yetki veya engeli kaldırır.

Veritabanında Arama İşlemleri

Bir veritabanı içersindeki bilgilerimiz arasında belli kriterlere uygun yada bir rapor şeklinde bir arama gerçekleştirmek istiyorsak  kullanmamız gereken kod  Select olmalıdır.

Select ifadesi bir tablodan verileri seçmek için kullanılır. Elde edilen veriler sonuç kümesi olarak adlandırılır ve yine bir tablo görüntüsü şeklinde görüntülenir.

Söz dizimi:

Tüm alanları görüntülemek istemediğimiz zamanlarda kolon adı belirterek istenilen bilgiler çekilebilir.

SELECT <görüntülenmek istenen kolonlar> FROM <tablo adı>

Tüm alanları göstermek istediğimiz durumlarda kolon adı yerine * kullanılır.

SELECT * FROM <tablo adı>

Şimdi birlikte bir örnek yapalım. Northwind veritabanı içersinde bulunan herhangi bir tablonun bilgilerini önce tablo ismi ile sonra * ile çağıralım.

Verilerimizi tablo ismi ile yada * simgesiyle hepsini getiriyoruz. Süper ama bir sorun var  yada sorundan çok bir eksik demeliyiz belkide belli kriterlere uyan bilgileri getirmek istediğimde ne yapmam gerekir ?

Böyle bir durumdada yardımımıza WHERE yantümcesi koşuyor. WHERE yantümcesi görüntülemek istediğimiz verileri belirli bir kritere göre seçebilmemizi sağlar.

Yazımı

SELECT <sütun adı> FROM <tablo adı> WHERE <koşul(lar)>

Yani WHERE yantümcesi diyor ki bana istediğin kriteri söyle NERDE eşleşen varsa alayını getireyim sana diyor. Ama bu kriterleri hangi operatörlerle sağlarız birde onu belirtelimki sadece eşittir işaretinden ibaret olduğu anlaşılmasın.

İşte WHERE yantümcesi ile kullanabileceğimiz operatörler

Bizde teşekür edip bir örnek yaparak Where yantümcesi istediğini veriyoruz.

Bu kez müşteriler tablosundayız ve Madrid deki müşterilerimizi görmek istiyoruz.

Nasıl Where yantümcesi işini iyi yapıyor değilmi 😀

WHERE yantümcesinin  operatörlerinden bahsetmiştik orada herşey güzel anlaşılır matematiksel şeyler var ama 2 operatör varki kafa karıştırabilir.  LIKE ve BETWEEN  bunlarında nasıl kullanıldığına kısaca deyinelim

LIKE

LIKE kelimesi sütundaki değerlerin, joker karakterler kullanılarak oluşturduğumuz bir arama koşulu ile karşılaştırılmasını sağlar.

SELECT <kolon adı> FROM <tablo adı>

WHERE <aranacak sütun> LIKE <kriter>

Örnek arama koşulları:

LIKE ‘BR%’                          İlk iki harfi BR olan tüm kayıtlar

LIKE ‘Br%’                           İlk iki harfi Br olan tüm kayıtlar

LIKE ‘%een’                       Son üç harfi een olan tüm kayıtlar

LIKE ‘%en%’                      İçerisinde en ifadesi geçen tüm kayıtlar

LIKE ‘_en’                           Son iki harfi en olan üç harften oluşan tüm kayıtlar

LIKE ‘[CK]%’                       C veya K harfleriyle başlayan tüm kayıtlar

LIKE ‘[S-V]ing                    ing ile biten ve ilk harfi S ile V harfleri arasında olan dört harfli herhangi kelime

LIKE ‘M[^c]%’                   M ile başlayan ikinci harfi c olmayan tüm kayıtlar

BETWEEN..AND

BETWEEN … AND operatörü 2 değer ile belirtilen aralığı sınar. Bu değerler sayı, metin veya tarih olabilir.

SELECT <kolon adı> FROM <tablo adı>

WHERE <sütun adı> BETWEEN <değer 1> AND <değer 2>

Umarım faydalı olmuştur bir başka yazıda görüşmek dileği ile ….

M.Zeki Osmancık

SQL _ Views II 253 219 mezo

SQL _ Views II

Bir önceki yazımızda View nasıl yazılır ne işe yarar bunu öğrenmiştik . Bu yazımızda ise View içersinde yapabileceğimiz bir takım işlemleri öğreneceğiz.
Oluşturduğumuz View yapısı üzerinde değişiklik yapabilmek için Alter View; Silebilmek için Drop View cümlelerini kullanıyoruz.

Encryption:

Encryption cümlesi şifreleme anlamına gelir. Türkçe anlamınında belirttiği gibi view in kod içeriğini  yani view i oluşturduğumuz kodları görüntülenemez şekilde şifrelememizi sağlar. Bu işlemi geri almak istersek maalesef ki başarısız oluyoruz çünkü Decryption gibi bir çözüm yok. Encryption kullanılması gerekiyorsa mutlaka View in kaynak kodlarının başka bir kaynağa yedeklenmesi şiddetle tavsiye edilir.

With Encryption Yapısı

Create View viewAdiWith EncryptionAS

Select Sorgusu

Örnek olarak yukardaki gibi bir View oluşturduğumuzda veritabanındaki Views klasörü içersinden bu yarattığımız View i bulduğumuzda üzerinde bir kilit simgesinin olduğunu göreceğiz ve sağ tık ile düzenlemeye çalıştığımızda başarısız olacağız. Encryption ile kodlarımızı emniyet almış olduk. Daha öncede belirttiğim gibi bunu tekrar geri döndürecek kilidi çözecek bir kod yok.

Oluşturulan view ların içeriklerini görüntülemek için kullandığımız bir stored procedure var. Sp_helptext . bu SP bize belirttiğimiz View içeriğini gösterir. Öncelikle nasıl kullanıldığına bakalım sonra Encrypt ettiğimiz View i görüntüleyebilirmiyiz ona bakalım.

Görüldüğü gibi normal bir view içeriğini görüntüledik. Şimdide Encrypt edilmiş view a bakalım 😉

Schemabinding

Encryption kadar olmasada Schemabinding kelimesinin tercümesi zaten bu kodu hangi amaçlar için kullanabileceğimizi anlamaya yeterli oluyor. Eğer oluşturulacak View içersinde Schemabinding kullanılıyorsa View içersinde kullandığımız tabloların sütunlarını kilitlemiş oluruz. View içersinde Schemabinding kullanırken hatırlamamız gereken bazı kurallar var.

Öncelikli kural Schemabinding kullanacağımız View içersindeki sorgularımızda * işaretini kullanmamak bunun yerine tüm görüntülemek istediğimiz sütunları tek tek yazmamız gerekiyor.  Yazmazsak aşağıdaki gibi bir hata ile karşılaşacağız.

Ayrıca belirteceğimiz tablo isimlerini tabloismi.sütunismi olarak belirtmemiz gerekiyor. Son olarakda tablo ismi ile alakalı olan kuralımız var , tablo isminde ise dbo.tabloismi yazmamız gerekiyor ki tam olarak tabloyu ve sütunlarının yerini garantilemiş olalım.

Yukarıdaki örnekte View’de görüntüleyeceğimiz verilerin bulunduğu tablo ya da tablolardaki sütunların yapısında yapılacak herhangi bir değişikliği bu View’i silmedikçe ya da Schemabinding özelliğini View’imizden kaldırmadıkça yapamayacağız. Oldu da böyle bir işlemi Schemabinding özelliği varken yapmaya kalkıştık, SQL bize bu işlemin yapılamayacağını belirten bir hata mesajı verecektir. UrunleriListele isimli View için kullandığımız dbo.Products tablosundan ProductName sütununu kaldırmaya çalışalım.

WithCheckOption

Son olarakda sizlere View lerin WithcheckOption özelliğinden bahsetmek istiyorum.  Biliyorsunuz ki View ler içersinde tek bir tablo ile işlem yaptığımızda Insert,Update, Delete gibi işlemleri yapabiliyoruz. İşte bu işlemleri yapabildiğimiz view ler içersinde bazı kısıtlama yapabilmek için WithCheckOption özelliğini kullanırız. Yeni bir view ile bu özelliği inceleyelim.

Bu şekilde tek tablo üzerinde ve Where kelimesi ile kriter belirtilerek oluşturduğumuz View üzerine insert işlemi yapmaya kalktığımızda hata ile karşılaşıyoruz.

Umarım yararlı olmuştur sonraki yazılarda görüşmek üzere.

Veritabanı (Database) Nedir ? 150 150 mezo

Veritabanı (Database) Nedir ?



Merhaba arkadaşlar

Biliyorsunuzki insanoğlu sürekli bir saklama derdindedir. Değerli olanı saklamak tüm canlıların doğasında vardır. Ne saklarız mesela ?  Para, önemli evrak ,ziynet eşyası vb. Hatta yaşam için önemli ve değerli olan yiyeceklerimizi bile buzdolaplarında belli bir düzenle saklarız değil mi ? Değerlimissss dediğimiz herşeyi gelebilecek tehlikelerden korumak için saklarız.

Teknoloji geliştikçe değerli şeylerde teknolojik olmaya başladı haliyle artık küçük bir veri ,bir hisse senedinden değerli olabiliyor günümüzde, o yüzden verilerimizide güvenli bir yerde muhafaza etmek isteriz. Bu arada veri ne diyecek olursakda: bilgisayarda  işlenmemiş ham bilgilere veya bilgisayarın alabildiği işleyebildiği sonuç üretip saklayabildiği herşeydir.Dağınık bilgi kümesidir ve anlamlı bir şekilde düzenlendiğinde yararlı bilgi olur. Peki veriler bizim için para ziynet eşyası vs  kadar önemliyse bu verileride güvenli bir yerde tutmalıyız. Bu yerin adıda VeriTabanı.

Peki veritabanı nedir ?

Veritabanı birbiri ile ilişkili veriler topluluğu, aynı zamanda veriyi yönetebilmek ve sunmak için kullanılan tablolar sorgular raporlardan oluşan nesneler topluluğudur. Sadece veriler yığını değildir ilişkileride inceleyip yorumlayabilirler.  Bir başka deyişle bilgisayarda sistematik şekilde saklanmış programlarca işlenebilecek veri yığınıdır.

Ne avantajı var veritabanının dersek ilk olarak veri tekrarından kurtulucaz sonra bellek tasarufu sağladığı için bilgisayarımız çok yorulmayacak , standart bir sorgu dili vardır onunla tüm işlemlerimizi yapabiliyor olacağız ve en önemliside veri bütünlüğümüz bozulmayacak.

Dezavantajı yokmu tabiki var  ilk olarak profesyonel bir kurulum gerektiriyor eğer doğru düzgün bir kurulum tasarım yapılmazsa sonradan işler bozulabilir tüm veriler kaybolabilir. Diğer dejavantaj ise  klasik dosya biçimlerine göre birazcık maaliyetli .

Verileri sistematik olarak depolayan yazılımlara ise  “Veri Tabanı Yönetim Sistemi” deniyor. Birçok yazılım bilgi depolayabilir ama aradaki fark, veri tabanın bu bilgiyi verimli bir şekilde düzenleyebilmesi ve ona hızla ulaşabilmesidir. Bilgiye gerekli olduğu zaman ulaşabilmek esastır. Bilgilerin bütünlük içerisinde tutulabildiği ilişkilerin incelenerek bir çok kriterle işlem gerçekleştirilen ve birden fazla kullanıcıya aynı anda bilgiye erişim imkânının sağlandığı programlardır.

Örneğin : MS-SQL Server, Oracle , Sybase, Acces,Postgre SQL

Veritabanı yazılımları yapı bakımından 2 ye ayrılırlar .

1-      Düz Dosya Veritabanı oluşturan programlar.

Tüm verileri tek bir tabloya sığdıran ve kayıtta ortak olan herhangi bir bilginin her kayıtta tekrarlandığı veritabanı uygulamalarıdır.

Bu tür programlara en iyi örnek Notepad , MS Word , MS Excel

2-      İlişkisel Veritabanı oluşturan programlar

Düz dosya veritabanı mantığının tam tersine bir çok farklı tablo kullanılan tablolar arasında ilişkiler bulunan bu ilişkileri düzenleyen yöneten sistemlerdir. Birden fazla tablo arasındaki geçişleride ilişkiler sayesinde daha hızlı erişim daha tasarruflu disk kullanımı sağlar ve güncelleme işlemi çok daha basit olur.

Veritabanı bileşenleri

Tablolar: Bir veritabanında verilerin saklandığı birimlerdir  ve birden fazla olabilirler aralarındaki bağ ile tek bir tablonun yükü diğer tablolara dağıtılmış olur ve peformans sağlar.

Raporlar: Raporlama Servisleri çeşitli amaçlar için veritabanındaki bilgileri düzenli kurallı ve isteğe uygun olarak raporlayan ve uygulamalarımızda bir dizi işlevsellik sağlayan servislerdir.

Sorgular: Veritabanı sistemi içersinde yer alan tablolardaki verilerin ilgili kodlar yardımı ile isteğe uygun olarak seçilerek belirli bir düzen içersinde sunulması olayıdır .

Umarım veritabanları ile ilgili fikir sahibi olmuşsunuzdur.

Görüşmek üzere.


    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.